カテゴリ: COBOL 更新日: 2025/11/10

COBOLのEOF検出とループ制御|初心者でもわかるファイル終端処理

END-OF-FILE(EOF)検出とループ制御
END-OF-FILE(EOF)検出とループ制御

先生と生徒の会話形式で理解しよう

生徒

「COBOLでファイルの終わり(EOF)をどうやって知るんですか?」

先生

「COBOLでは、END-OF-FILEAT ENDという構文で、ファイル終端(EOF)を検出できます。」

生徒

「終わりを検出して、どうやってループを止めればいいですか?」

先生

「ループ制御を使えば、ファイルを最後まで順番に読み込んで処理できます。初心者の方にもわかりやすく説明しますね。」

1. EOF(END‑OF‑FILE)って何?

1. EOF(END‑OF‑FILE)って何?
1. EOF(END‑OF‑FILE)って何?

EOF(エンドオブファイル)とはファイルの終わりを指す言葉です。COBOLでは、「もうこれ以上読むデータがありません」という合図のように使われます。プログラミング初心者向けに例えるなら、ファイルは「本」で、EOFは「本の最終ページを超えたあと」という感じです。

キーワード:EOF検出、END-OF-FILE、ループ制御、ファイル読み込み、プログラミング初心者。

2. EOF検出の基本構文

2. EOF検出の基本構文
2. EOF検出の基本構文

ファイルをREADして、AT ENDEND-OF-FILEを使えば、終わりを検出できます。


READ input-file
    AT END MOVE "YES" TO EOF-FLAG
END-READ

解説:
READはファイルから1行読み込む命令。
AT ENDは「読み込めなかったとき」、つまりEOFに達したときに処理をします。
EOF-FLAGは終わりを知らせる変数です。

3. ループ制御とEOFの組み合わせ

3. ループ制御とEOFの組み合わせ
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判定の違い

4. FILE STATUSと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検出を応用したファイル処理例

5. 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検出時のエラー対策も大切

6. EOF検出時のエラー対策も大切
6. EOF検出時のエラー対策も大切

EOF以外のエラーが起きた時は、INVALID KEYFILE STATUSのコードを使って対策します。たとえば、ファイル読めない時にメッセージ表示や停止させる処理が必要です。


READ input-file
    AT END MOVE "YES" TO EOF-FLAG
    INVALID KEY DISPLAY "読み込みエラー発生"
END-READ

ループ処理の中でエラー対策を入れておくと、安心してファイル全体処理ができます。

7. 初心者におすすめ簡単例え

7. 初心者におすすめ簡単例え
7. 初心者におすすめ簡単例え

EOF検出とループ制御は「読書」に似ています。本を1ページずつ読んでいって、最後のページを超えたら読み終わり、それと同じ流れです。

また「旗」=EOF-FLAGは「読み終わりのしるし」のようなもので、ループを止める目印になります。

8. 大事なポイント

8. 大事なポイント
8. 大事なポイント
  • EOF検出はAT ENDFILE STATUSでできる
  • ループ制御(PERFORM UNTIL)を使えばファイル全体を順番に処理できる
  • エラーも一緒に見ておくと安心、安全なプログラムになる

COBOLでファイル処理を行う場合、「どこまでデータがあるのか」を判断する仕組みがとても大切です。 AT ENDFILE 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プログラムの基本中の基本です。 ここをしっかり理解することで、ファイル処理全体がスムーズになります。 小さなサンプルを動かしながら、手を動かして学んでいくことが大切です。

カテゴリの一覧へ
新着記事
C#でタイムスタンプの精度を上げるためのテクニックを徹底解説!(初心者向け)
C#のコーディング規約(C# Coding Conventions)とは?読みやすいコードを書くための基本ルール
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
COBOL資産のバージョン管理とは?初心者でもわかる保守と管理の基本
人気記事
No.1
Java&Spring記事人気No1
COBOLで学ぶSELECT文のORDER BY・GROUP BY活用法!初心者でもわかるデータ集計
No.2
Java&Spring記事人気No2
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.4
Java&Spring記事人気No4
COBOLで学ぶカーソル操作と複数行データ取得の基本
No.5
Java&Spring記事人気No5
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.7
Java&Spring記事人気No7
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.8
Java&Spring記事人気No8
C#の日付型(DateTime)と基本的な使い方を解説|初心者向け入門ガイド