COBOLのEOF検出とループ制御|初心者でもわかるファイル終端処理
生徒
「COBOLでファイルの終わり(EOF)をどうやって知るんですか?」
先生
「COBOLでは、END-OF-FILEやAT ENDという構文で、ファイル終端(EOF)を検出できます。」
生徒
「終わりを検出して、どうやってループを止めればいいですか?」
先生
「ループ制御を使えば、ファイルを最後まで順番に読み込んで処理できます。初心者の方にもわかりやすく説明しますね。」
1. EOF(END‑OF‑FILE)って何?
EOF(エンドオブファイル)とはファイルの終わりを指す言葉です。COBOLでは、「もうこれ以上読むデータがありません」という合図のように使われます。プログラミング初心者向けに例えるなら、ファイルは「本」で、EOFは「本の最終ページを超えたあと」という感じです。
キーワード:EOF検出、END-OF-FILE、ループ制御、ファイル読み込み、プログラミング初心者。
2. EOF検出の基本構文
ファイルをREADして、AT ENDやEND-OF-FILEを使えば、終わりを検出できます。
READ input-file
AT END MOVE "YES" TO EOF-FLAG
END-READ
解説:
・READはファイルから1行読み込む命令。
・AT ENDは「読み込めなかったとき」、つまりEOFに達したときに処理をします。
・EOF-FLAGは終わりを知らせる変数です。
3. ループ制御とEOFの組み合わせ
EOF検出とループを組み合わせることで、「ファイルの先頭から順番に読み込む」処理ができます。
MOVE "NO" TO EOF-FLAG.
PERFORM UNTIL EOF-FLAG = "YES"
READ input-file
AT END MOVE "YES" TO EOF-FLAG
NOT AT END
DISPLAY 見出し: データ内容
END-READ
END-PERFORM
ポイント:
・PERFORM UNTILで「終わるまで繰り返す」条件付きループ。
・EOFまで処理を続けるので、抜け漏れなくファイル全体を読むことができます。
4. FILE STATUSとEOF判定の違い
EOF検出にはAT ENDだけでなく、FILE STATUSでも判定できます。次のコードはFILE STATUSを使ったEOF判定です。
READ input-file
IF WS-FS = "02"
DISPLAY "ファイル終端に達しました"
END-IF
ここでは、FILE STATUSの"02"というコードがEOFを意味します。
5. EOF検出を応用したファイル処理例
実際には、読み取ったデータを別ファイルに書き込む時にもEOFループを使います。例を見てみましょう。
MOVE "NO" TO EOF-FLAG.
PERFORM UNTIL EOF-FLAG = "YES"
READ input-file
AT END MOVE "YES" TO EOF-FLAG
NOT AT END
WRITE output-rec FROM input-rec
END-READ
END-PERFORM
EOFまで読み込み→書き込み処理を繰り返すことで、入力ファイルを丸ごとコピーできます。
6. EOF検出時のエラー対策も大切
EOF以外のエラーが起きた時は、INVALID KEYやFILE STATUSのコードを使って対策します。たとえば、ファイル読めない時にメッセージ表示や停止させる処理が必要です。
READ input-file
AT END MOVE "YES" TO EOF-FLAG
INVALID KEY DISPLAY "読み込みエラー発生"
END-READ
ループ処理の中でエラー対策を入れておくと、安心してファイル全体処理ができます。
7. 初心者におすすめ簡単例え
EOF検出とループ制御は「読書」に似ています。本を1ページずつ読んでいって、最後のページを超えたら読み終わり、それと同じ流れです。
また「旗」=EOF-FLAGは「読み終わりのしるし」のようなもので、ループを止める目印になります。
8. 大事なポイント
- EOF検出は
AT ENDやFILE STATUSでできる - ループ制御(
PERFORM UNTIL)を使えばファイル全体を順番に処理できる - エラーも一緒に見ておくと安心、安全なプログラムになる
COBOLでファイル処理を行う場合、「どこまでデータがあるのか」を判断する仕組みがとても大切です。
AT ENDやFILE STATUSを使えば、ファイルの終わり(EOF)を明確に検出できるので、
必要な分だけを確実に処理することができます。
また、PERFORM UNTILによるループ処理を活用することで、ファイルの先頭から終端までを
順番に読み進めることができます。処理の順番を守るという点でも非常に役立つ構文です。
初心者の方には、次のような「EOFまで繰り返す基本形」を覚えておくと安心です。
MOVE "NO" TO EOF-FLAG.
PERFORM UNTIL EOF-FLAG = "YES"
READ INPUT-FILE
AT END
MOVE "YES" TO EOF-FLAG
NOT AT END
DISPLAY "読み取り結果:" INPUT-REC
END-READ
END-PERFORM
このサンプルでは、EOF-FLAGという変数を使って、ファイルの終わりを検出しています。 もしファイルの中に3件しかデータがなければ、3回だけ処理されて止まる仕組みです。 無限ループになることも防げるため、初心者にもおすすめです。
ファイル読み込みとEOF判定は、COBOLプログラムの基本中の基本です。 ここをしっかり理解することで、ファイル処理全体がスムーズになります。 小さなサンプルを動かしながら、手を動かして学んでいくことが大切です。