COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
生徒
「COBOLでファイルがちゃんと開けたか確認する方法ってありますか?」
先生
「ありますよ。COBOLではFILE STATUS(ファイルステータス)という仕組みで、ファイル操作の成功や失敗を確認することができます。」
生徒
「ファイルが開けなかったり、読み取りでエラーが起きたらどうするんですか?」
先生
「その場合は、ファイルステータスの値を見て、エラーの種類を特定して、それに応じた処理をするんです。今回は、そのやり方を初心者向けにわかりやすく解説していきますね!」
1. ファイルステータス(FILE STATUS)とは?
ファイルステータス(FILE STATUS)とは、COBOLでファイルを開く(OPEN)、読み取る(READ)、書き込む(WRITE)などのファイル入出力を行った結果を、2文字のコードで受け取るための仕組みです。処理がうまくいったのか、どんな種類のエラーが起きたのかを、数字の組み合わせで教えてくれます。
たとえば「00」は成功、「35」はファイルが見つからない(存在しない)といったように、結果がはっきり分かります。プログラミング未経験の方は、ファイル操作のたびに「結果の通知が届く」とイメージすると理解しやすいです。通知が「00」なら安心、別の番号なら「原因を調べて対処する」という流れになります。
身近な例でいうと、荷物の追跡番号のようなものです。追跡番号を見ると「配達完了」「持ち戻り」など状況が分かりますよね。同じように、ファイルステータスを見ることで「正常に処理できたのか」「どこでつまずいたのか」が分かり、エラー処理の第一歩になります。
初心者向け:ファイルステータスを確認する超シンプル例
OPEN INPUT FILE-IN
IF WS-FILE-STATUS = "00"
DISPLAY "ファイルを開けました(成功)"
ELSE
DISPLAY "ファイルを開けませんでした(失敗)"
DISPLAY "FILE STATUS:" WS-FILE-STATUS
END-IF
ポイント:
・OPENの直後にWS-FILE-STATUSを確認すると、結果がすぐ分かります。
・「00」以外のときは、まずコードを表示しておくと原因調査がしやすくなります。
・COBOLのファイル処理では、この確認を入れておくことで「動かない理由が分からない」を避けられます。
2. FILE STATUSの使い方:データディビジョンでの定義
FILE STATUSを使うには、「どのファイルの結果を、どの変数で受け取るか」を事前に決めておく必要があります。その設定を行うのが、FILE-CONTROLとWORKING-STORAGE SECTIONです。ここでの定義は、後続のファイル処理すべての土台になります。
まずFILE-CONTROLでは、ファイルの場所や形式とあわせて、「ファイルステータスを格納する変数」を指定します。そして、その変数そのものをWORKING-STORAGE SECTIONで用意します。難しく考えず、「結果を書き込むメモ帳を先に準備する」とイメージすると分かりやすいです。
SELECT FILE-IN ASSIGN TO "INPUT.DAT"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.
WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.
やさしく解説:
・SELECT FILE-INは「FILE-INという名前でファイルを扱います」という宣言です。
・ASSIGN TO "INPUT.DAT"で、実際のファイル名を指定します。
・FILE STATUS IS WS-FILE-STATUSによって、ファイル操作の結果が自動的にWS-FILE-STATUSへ入ります。
・PIC XXは「2文字分の入れ物」で、FILE STATUSのコードを受け取るための決まりです。
この定義をしておくことで、OPENやREADを実行した直後にWS-FILE-STATUSを確認できるようになります。逆に言うと、ここを書いていないと、ファイル操作が成功したのか失敗したのかを判断できません。FILE STATUSは、COBOLのファイル処理における必須の準備作業だと覚えておきましょう。
3. 実際にファイルを開いてエラーを確認する
COBOLのファイル処理でまずやっておきたいのが、OPENした直後にFILE STATUSを確認することです。ファイルが開けていないのに、そのままREADを続けると、エラーの原因が分かりにくくなります。最初の時点で「開けた/開けない」を切り分けるだけで、トラブル対応がかなり楽になります。
基本の考え方はシンプルで、ステータスが「00」なら成功、それ以外なら何かが起きています。たとえば入力ファイルの名前を間違えたり、配置場所にファイルが無かったりすると「35(ファイルが存在しない)」になることが多いです。初心者のうちは、まずコードを表示して状況を把握するのがコツです。
初心者向け:OPENの結果をその場で確認する例
OPEN INPUT FILE-IN
IF WS-FILE-STATUS = "00"
DISPLAY "ファイルを開けました。処理を続けます。"
ELSE
DISPLAY "ファイルを開けませんでした。"
DISPLAY "ステータスコード:" WS-FILE-STATUS
STOP RUN
END-IF
解説:
・OPEN INPUT FILE-INで入力ファイルを開きます。
・直後にWS-FILE-STATUSを見て、成功なら次の処理へ進みます。
・失敗なら、まずはステータスコードを表示します。コードが分かれば「ファイルが無い」「形式が違う」など原因の方向性が見えてきます。
・STOP RUNで止めているのは、開けていない状態で無理に処理を続けないためです(エラーが連鎖しにくくなります)。
このチェックを入れておくだけで、COBOLのファイル入出力にありがちな「どこで失敗したのか分からない」を防げます。まずはOPENの成功確認を習慣にして、落ち着いてエラー処理を進めていきましょう。
4. よく使われるFILE STATUSコード一覧
COBOLには多くのファイルステータスコードがありますが、初心者が知っておくと便利なものを表にまとめます。
| コード | 意味 |
|---|---|
| 00 | 正常に処理された(成功) |
| 02 | ファイルの終端(EOF)に達した |
| 10 | レコードが見つからなかった |
| 21 | キーの値が重複している |
| 35 | ファイルが存在しない |
| 39 | ファイル属性に誤りあり |
| 90〜99 | システムエラーや実行環境の問題 |
このように、ファイルステータスコードを知っておくと、問題が起きたときにどこに原因があるかが一目でわかるようになります。
5. 読み取りや書き込みの時にも使える
ファイルステータスは、ファイルを開くときだけでなく、読み取り(READ)や書き込み(WRITE)、削除(DELETE)の時にも使用します。
例えば、ファイルの終わり(EOF)を検出する場合には次のように書きます。
READ FILE-IN
AT END
DISPLAY "ファイルの終わりです。"
NOT AT END
DISPLAY "読み取り成功。"
END-READ
また、ファイルステータスを使うともっと明確に状態を判断できます。
READ FILE-IN
IF WS-FILE-STATUS = "10"
DISPLAY "該当するレコードが見つかりませんでした。"
END-IF
6. ファイルステータスがなかったらどうなる?
もしFILE STATUSの指定をしなかった場合、エラーの内容を知る手段がなくなります。つまり、エラーが発生してもプログラムが止まるだけで、「何が起きたのか」がわかりません。
プログラミング初心者が一番困るのは、「なぜエラーが起きているのか分からない」状態です。だからこそ、FILE STATUSは必ず書くようにしましょう。
7. ファイルエラー処理はユーザーへの思いやり
例えば、あるレストランで注文したメニューが売り切れていたとします。そのとき、店員が「すみません、売り切れです」と言ってくれると親切ですよね。
COBOLでも同じで、ファイルエラーがあったときにユーザーに分かるように表示するのは「プログラムの思いやり」です。エラー処理をしっかりすることは、やさしいプログラマーへの第一歩です!
まとめ
COBOLのファイルステータスは、ファイル処理の正確さや安全性を守るために欠かせない大切な仕組みです。ファイルを開くとき、読み取るとき、書き込むとき、削除するとき、どの場面においても必ず「成功したか」「失敗したか」を示してくれるので、初心者でもエラーの原因を理解しやすくなります。とくに、現場のシステムでは大量のファイルを扱うことが多く、どこか一つで問題が起きると全体の処理が止まったり、誤ったデータが作られたりする危険があります。そんなときにファイルステータスの値を確認しておけば、無駄な調査や混乱を防ぎ、落ち着いてエラーを切り分けられます。 さらに、実際の現場でよく使われる「00」「35」「02」「10」といった代表的なコードは覚えておくと、プログラムの確認作業が格段に楽になります。特に「35」が示す「ファイルが存在しない」というエラーは、テスト環境でよく発生するため、初心者でも遭遇しやすいものです。目にした瞬間に「ファイル名の指定が間違っているかもしれない」「ファイルが配置されていないのかもしれない」とすぐに原因の見当がつきます。 また、FILE STATUS を変数として WORKING-STORAGE SECTION に定義し、ファイル操作のたびにその内容をチェックするという流れは、COBOLでのファイル処理の基本的な設計パターンといえます。このパターンを覚えておけば、異なる種類のファイルや処理に応用ができ、そのまま現場でも使える実践的なスキルになります。たとえば、売上データや顧客データを扱うバッチ処理、毎日繰り返す定期処理など、さまざまなプログラムで利用されます。 さらにエラー処理は、ただ止めるだけではなく、ユーザーに分かりやすいメッセージを返すことで、システム全体の使いやすさ向上にもつながります。「ファイルがありません」「レコードが見つかりません」といった丁寧な表示があるだけで、利用者は落ち着いて対処できます。これは、COBOLが古くから業務システムで使われ続けてきた理由のひとつであり、その安定性と信頼性を支えている考え方です。 また、ファイルの終端に達したことを示す「02」も実務ではよく登場します。例えば、毎日追記されるログを読み取る処理や、マスタファイルの内容を順に読み込む処理では、ファイルの終わりを正しく判断しないと永遠に読み続けてしまい、正常に終了できません。こうした場面でも WS-FILE-STATUS の値を判断材料にすることで、処理の流れを安全に制御できます。 ファイルステータスを指定しない場合は、エラーが起こっても原因を知ることができず、初心者にとっては大きな壁となります。プログラムが止まったまま理由がわからず、解決に多くの時間を使ってしまうケースも珍しくありません。だからこそ、COBOLでは必ず FILE STATUS を用意しておくことが、良いプログラムの第一歩です。これは、単に文法的なルールではなく、プログラムを使う人や管理する人への思いやりと言えるでしょう。 ここまで学んできた内容は、COBOLの基本的な考え方にも大きく関わります。COBOLは業務データを正確に取り扱う言語であり、ひとつのミスが大きな影響につながる可能性があるため、エラー処理や安全な設計がとても重視されています。ファイルステータスの仕組みは、その思想をよく表していると言えます。 もし複数のファイルを扱う場合でも、ファイルごとに FILE STATUS を変数に指定しておけば、どのファイルで問題が起きているかを正確に把握でき、トラブルの原因をすぐに発見できます。これはメンテナンス性の向上にもつながり、プログラムの修正や改修が必要になったときにも役立ちます。 次の小さな応用例では、複数のステータスコードに応じて異なるメッセージを表示する方法を示します。
OPEN INPUT FILE-IN
EVALUATE WS-FILE-STATUS
WHEN "00"
DISPLAY "正常にファイルを開きました。"
WHEN "35"
DISPLAY "ファイルが存在しません。"
WHEN "39"
DISPLAY "ファイル属性に誤りがあります。"
WHEN OTHER
DISPLAY "その他のエラーが発生しました。"
END-EVALUATE
このように、COBOLではファイルステータスを読み取ることで、細かな原因の違いにも柔軟に対処できます。EVALUATE を使うことで、複数の状態に応じた処理を分岐でき、読みやすく拡張しやすいプログラムになります。 今日の振り返りとして大切なのは、「エラーが起きないことを祈る」のではなく、「エラーが起きても正しく対処できるプログラムを書く」という考え方です。ファイルステータスは、そのための土台となります。これを理解し、自然に使いこなせるようになれば、COBOLのファイル処理に対する不安は大きく減り、自信を持ってプログラムを書けるようになります。 そして実際の仕事では、必ず先輩や保守担当者がプログラムを読む機会があります。ファイルステータスで丁寧に制御されたプログラムは、読む人にも優しく、修正が必要なときにも役立ちます。未来の自分や他の誰かが困らないように設計することは、立派なプロの姿勢です。
生徒
「今日の内容で、ファイルが開かなかった理由がすぐに分かるって知れて、とても安心できました。最初はただ止まってしまうだけで困っていたけど、ファイルステータスがあれば原因を知ることができるんですね。」
先生
「そのとおりです。プログラムが黙ったまま止まると、どこで何が起きたのか分からなくて大変ですよね。でも、ステータスの値があれば落ち着いて調べられますし、問題を素早く解決できます。」
生徒
「コードの中でWS-FILE-STATUSを確認するところも、他のファイル処理でも同じように使えるんですか?」
先生
「もちろんです。読み取りや書き込み、削除の処理でも使えますし、EVALUATEで分岐にしておけばより分かりやすくできます。エラーの種類に応じて別の動きをさせることもできますよ。」
生徒
「なるほど。ファイルステータスって、ただの番号だと思っていたけど、きちんと見れば安心して処理が書けるし、トラブルの手がかりにもなるんですね。今後は必ず入れるようにします。」
先生
「習慣にしてしまえば怖くありませんよ。これからファイル処理のプログラムを作るときには、ぜひステータスを確認するように心がけてみてください。きっと大きな助けになります。」