COBOLのファイルステータスでエラーを見逃さない!初心者でも安心のエラー検知と対処法
生徒
「COBOLでファイルを読み込もうとしたら、エラーが出て動かなくなりました…。どうすれば原因がわかるんですか?」
先生
「それはファイルステータスを使うと分かりやすくなりますよ。ファイルステータスは、ファイル操作のあとにどんな状態だったかを数値で教えてくれる仕組みです。」
生徒
「ファイルステータスって、難しそう…。初心者でも使えるように教えてください!」
先生
「もちろんです!それでは、初心者にもわかるように、ファイルステータスの基本から見ていきましょう。」
1. ファイルステータスとは?
ファイルステータスとは、COBOLのファイル操作(読み込みや書き込み)をした直後の状態を教えてくれる2桁の数字です。この数字を確認することで、ファイルが正しく開けたか、読み込めたか、エラーが起きたかを判断できます。
たとえば、ファイルが見つからなかったときは「35」、正常に読み込めたときは「00」、ファイルの終わりに達したときは「10」など、数字によって状態がわかるようになっています。
初心者の方には「お知らせランプ」のようなものだと考えてください。何か問題があったときに、「ランプ」が光って教えてくれるイメージです。
2. ファイルステータスの定義方法
COBOLでファイルステータスを使うには、まずFILE-CONTROLの中でSTATUSを使って定義します。定義した変数には、ファイル操作後に自動で値が入ります。
ファイルを読み込むときの定義例を見てみましょう。
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "input.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.
このように書くことで、ファイルを開いたり読んだりするたびにWS-FILE-STATUSに状態コードが入ります。
3. ワーキングストレージでの変数定義
WS-FILE-STATUSという変数には、2文字のコードが入るので、次のように定義します。
WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.
PICとは「ピクチャ」の略で、「どんな形のデータを使うか」を表します。XXは2文字の英数字を表すので、ファイルステータスにピッタリです。
4. 実際に読み込み処理をしてエラー検知する例
それでは実際にファイルを開いて読み込むプログラムを作り、ファイルステータスをチェックしてみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. FILE-STATUS-CHECK.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "input.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-RECORD PIC X(30).
WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.
01 EOF-FLAG PIC X VALUE "N".
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
DISPLAY "ファイルステータス(OPEN):" WS-FILE-STATUS
IF WS-FILE-STATUS NOT = "00" THEN
DISPLAY "ファイルのオープンに失敗しました。"
STOP RUN
END-IF
PERFORM UNTIL EOF-FLAG = "Y"
READ IN-FILE
AT END
MOVE "Y" TO EOF-FLAG
NOT AT END
DISPLAY "読み込みデータ:" IN-RECORD
END-READ
DISPLAY "ファイルステータス(READ):" WS-FILE-STATUS
END-PERFORM
CLOSE IN-FILE
DISPLAY "ファイルステータス(CLOSE):" WS-FILE-STATUS
STOP RUN.
5. 実行結果の例と読み方
このプログラムを実行すると、画面にはファイルステータスの値が表示されます。
ファイルステータス(OPEN):00
読み込みデータ:田中一郎
ファイルステータス(READ):00
読み込みデータ:佐藤花子
ファイルステータス(READ):00
ファイルステータス(READ):10
ファイルステータス(CLOSE):00
「00」は正常、「10」はファイルの終わり(EOF: End Of File)を意味します。もしファイルが存在しなければ、最初の「OPEN」で「35」が表示され、読み込み処理は実行されません。
6. よく使われるファイルステータスコード一覧
よく使うファイルステータスは以下のとおりです。コードと意味をしっかり覚えておきましょう。
- 00:正常に処理が行われた
- 10:ファイルの終わりに達した(EOF)
- 30:ファイル属性のエラー(定義ミスなど)
- 35:ファイルが存在しない
- 39:ファイルのフォーマットが違う
- 92:読み取りや書き込みの失敗
この一覧は、トラブルが起きたときに原因を調べるヒントになります。
7. ファイルステータスを活用するコツ
ファイルステータスを使うと、エラーの原因がすぐに特定できるようになります。プログラムが止まっても、「なぜ止まったのか」「どこまで処理が進んでいたのか」が表示されるので、初心者でも安心してデバッグ(間違い探し)できます。
また、エラーが出たときに、エラーメッセージだけでなくWS-FILE-STATUSの値も一緒に表示すると、後から確認しやすくなります。
まとめ
ファイルステータスを理解することでエラー対応力が大きく向上する
今回の記事では、COBOLにおけるファイルステータスの役割と使い方について、 初心者の方でも安心して理解できるよう、基本から実践例まで丁寧に解説してきました。 COBOLのファイル処理では、ファイルのオープン、読み込み、書き込み、クローズといった 各操作のたびに、内部的に処理結果が判定されています。 その結果を数値として受け取れる仕組みが、ファイルステータスです。
ファイルステータスを確認することで、 「ファイルが存在しなかったのか」 「正常に読み込めたのか」 「すでにファイルの終わりに達しているのか」 といった状態を正確に把握できます。 これは、ファイル処理でエラーが発生した際に、 原因を素早く特定するための非常に重要な手がかりになります。 特に業務システムやバッチ処理では、 ファイルエラーを見逃すと大きな障害につながるため、 ファイルステータスの確認は欠かせない基本技術と言えます。
DISPLAYと組み合わせたエラー検知の考え方
記事の中では、FILE-CONTROLでのSTATUS指定や、
WORKING-STORAGEでの変数定義、
そしてOPEN、READ、CLOSEごとに
DISPLAY文でファイルステータスを表示する方法を紹介しました。
このように表示を行うことで、
プログラムがどこまで正常に処理されたのかを
実行結果から一目で確認できます。
特に初心者の方にとっては、 エラーが発生したときに突然プログラムが止まるよりも、 ステータスコードと一緒にメッセージが表示される方が、 安心して原因を考えることができます。 ファイルステータスは単なる数値ではなく、 プログラムと人をつなぐ「状況説明のサイン」として 活用する意識を持つことが大切です。
まとめとしてのサンプルプログラム
ここで、今回学んだ内容を整理するために、 ファイルステータスを使ったシンプルな確認用サンプルを見てみましょう。 ファイル操作のたびに状態を表示することで、 エラー検知と処理状況の把握を同時に行う構成になっています。
OPEN INPUT IN-FILE
DISPLAY "OPEN後のステータス:" WS-FILE-STATUS
IF WS-FILE-STATUS NOT = "00" THEN
DISPLAY "ファイルを開けませんでした"
STOP RUN
END-IF
READ IN-FILE
DISPLAY "READ後のステータス:" WS-FILE-STATUS
IF WS-FILE-STATUS = "10" THEN
DISPLAY "ファイルの終わりに達しました"
END-IF
CLOSE IN-FILE
DISPLAY "CLOSE後のステータス:" WS-FILE-STATUS
このような形で処理の節目ごとにファイルステータスを確認しておくと、 実行時のトラブルにも落ち着いて対応できるようになります。 学習段階では特に、DISPLAYによる確認を積極的に行い、 ファイル処理の流れを体で覚えていくことが重要です。
生徒
「ファイルステータスって数字だけ見ると難しそうでしたけど、 表示して確認すると意味がよく分かりました。」
先生
「そうですね。ファイルステータスは、 ファイル処理の結果を教えてくれる大切な情報なんです。」
生徒
「エラーが出たときも、どこで失敗したのかが分かるので、 以前より安心してプログラムを動かせそうです。」
先生
「その感覚はとても大切ですよ。 COBOLのファイル処理では、ステータス確認が基本になります。」
生徒
「これからはファイルを扱うときに、 必ずファイルステータスを確認するようにします。」
先生
「それができれば、エラーを見逃さない堅実なプログラムが書けます。 ぜひこの習慣を続けていきましょう。」