カテゴリ: COBOL 更新日: 2026/01/19

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プログラムの基本中の基本です。 ここをしっかり理解することで、ファイル処理全体がスムーズになります。 小さなサンプルを動かしながら、手を動かして学んでいくことが大切です。

まとめ

まとめ
まとめ

ファイルの終端を検出しながらループ制御を行う仕組みは、COBOLの中でも特によく使われる大切な考え方です。実際の業務では、売上データを読み込んだり、社員情報を処理したり、さまざまな場面でファイルを一行ずつ扱うことがあります。そのとき、終わりがどこなのか判断できなければ、延々と読み続けてしまったり、意図しないエラーが発生したりします。だからこそ、AT ENDFILE STATUSを使って終端を確認し、不要な処理を止めることが重要になります。とても地味に見える仕組みですが、安心して動作するプログラムを作るためには欠かせない考え方です。

初心者がつまずきやすいのは、「EOFを検出したあとに何をするのか」という流れです。フラグを立ててループを終わらせる方法、状態コードで判定する方法、どちらも仕組みは同じで「読み終わりを判断できるかどうか」という点がポイントになります。もし大きなファイルを扱っていたり、複数のファイルを連続で処理していたりしても、ループとEOFさえ正しく扱えれば最後まで安全に読み切ることができます。この考え方を覚えておくと、COBOLのファイル処理が一気に分かりやすくなるでしょう。

よくある処理の流れをもう一度

ファイルを開いて、読み込んで、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

この形はシンプルですが、実務の現場でもよく使われます。フラグを使う方法はとても読みやすく、他の人がプログラムを読んでも意図が理解しやすくなります。また、ファイルに不正なデータが混ざっていても、エラー判定を追加することで安全に処理できます。少しずつ改良しながら信頼できるプログラムにするというのが、COBOLらしい書き方でもあります。

FILE STATUSを使う場面

フラグではなく、状態コードで管理する方法もあります。たとえば、読み終わりのときは"02"、読み込み失敗なら"30"など、決まった番号が返ってきます。ファイルの種類や環境によっては、明確にコードで管理したい場面もあります。次の例は状態コードでEOFを判断する形です。


       READ INPUT-FILE
       IF WS-FS = "02"
           DISPLAY "おわりまで読みました"
       END-IF

状態コードを使うと、異常終了なのか単に読み終わっただけなのかを区別できるため、エラー対策が柔らかく書けるという利点があります。大きなシステムでは、思わぬ入力エラーに備えることが多く、状態コードで細かく判断することも一般的です。

読みながら別ファイルに書き込む流れ

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

もし途中でエラーが起きても、INVALID KEYFILE STATUSを使えば異常を確認できます。読み込みだけでなく書き込みにも注意を向けるようになると、さらに一歩先のファイル処理が身につきます。

初心者が気をつけたい小さなポイント

ファイルを読み込むとき、忘れてはいけないことがいくつかあります。例えば、OPEN INPUTCLOSEの書き忘れ、フラグの初期化忘れ、レコード定義の桁ずれなどです。どれも些細なことですが、うっかり抜けると望んだ動きになりません。特に、フラグを初期化しないままループに入ると、永遠に処理が止まらないことさえあります。こうした細かい注意が、ファイル処理の安定につながります。

終端を正しく扱えるようになると、COBOLでのファイル処理が一気に実用的になります。扱えるファイルの種類や規模も広がり、他の処理と組み合わせることでより複雑な仕組みを作ることも可能になります。

先生と生徒の振り返り会話

生徒

「EOFって難しそうだと思っていたけど、読み終わったら旗を立てるって考えれば理解しやすいですね!」

先生

「その感覚はとても大事ですよ。読み終わったことを知らせる仕組みさえ作れれば、ループ制御は自然とうまくいきます。」

生徒

「PERFORM UNTILと組み合わせると、ファイルを全部読めるのが便利ですね。書き込みと合わせても使えました。」

先生

「そうです。次はエラー処理も少しずつ練習してみると、もっと堅実なプログラムになりますよ。」

生徒

「これで大きなデータも扱えそうです!最初は怖かったけど、やってみると整理できました。」

先生

「着実に理解できていますね。EOFの検出はCOBOLの基本のひとつなので、しっかり身につけておくと役に立ちますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

COBOLでEOFとは何ですか?ファイルの終わりをどう検出しますか?

COBOLにおけるEOF(End Of File)は、ファイルの終わりを意味します。ファイルを読み込んで、もうデータが存在しないことを判定するために使います。EOF検出にはAT ENDFILE STATUSという構文を使います。
カテゴリの一覧へ
新着記事
New1
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New2
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New3
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
New4
C#
C#の配列とListの違いを比較して理解しよう
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法