COBOLのREAD文を完全マスター!初心者でもわかるレコードの読み込み方法
生徒
「COBOLでファイルの中身を1行ずつ読んでいくには、どうすればいいんですか?」
先生
「それにはREAD文を使います。1件ずつ、順番にデータを読み込むことができますよ。」
生徒
「どんな風に使うのか、具体的に教えてもらえますか?」
先生
「もちろんです!では、COBOLのREAD文の使い方を一緒に学んでいきましょう。」
1. READ文とは?
COBOL(コボル)のREAD文は、ファイルに保存されたデータを1行ずつ(1レコードずつ)読み込むための命令です。ファイルとは、パソコン上に保存されているメモ帳のようなものだとイメージしてください。その中に名前や金額、住所などの情報が行単位で並んでいます。
このREAD文を使えば、上から順番に1件ずつ読み込んで処理することができます。繰り返し読み取るときにとても便利です。
2. ファイルの準備:OPEN文とのセットで使う
READ文を使うためには、まずファイルを開いておく必要があります。それがOPEN文です。COBOLでは、ファイルを「読むために開く」ことをOPEN INPUTと呼びます。これを忘れるとファイルを読み込めません。
OPEN INPUT IN-FILE
IN-FILEはファイル名のようなものです。これは、SELECT文であらかじめ定義しておく必要があります。
3. 基本的なREAD文の使い方
ファイルをOPENしたら、次にREAD文を使って1行ずつデータを読み込んでいきます。以下が基本的な形です。
READ IN-FILE
AT END
MOVE 'YES' TO END-FLAG
END-READ
このコードは、「IN-FILEから1件読み込む。もしファイルの終わり(EOF: End Of File)に達したら、END-FLAGに'YES'を入れる」という意味です。
AT ENDという部分は、「もう読むデータがありません」という時に実行される処理を書きます。
4. ファイルからすべてのデータを読み込む方法
実際には、ファイルの先頭から最後まで1件ずつすべて読み込みたい場合が多いです。その場合、PERFORMとREADを組み合わせて繰り返し処理を行います。
PERFORM UNTIL END-FLAG = 'YES'
READ IN-FILE
AT END
MOVE 'YES' TO END-FLAG
NOT AT END
DISPLAY IN-RECORD
END-PERFORM
このコードでは、END-FLAGが'YES'になるまで、READ文を繰り返します。1件読み込むたびに、IN-RECORDの中身を表示しています。
5. 実際のサンプルコード(全体)
ここまでの内容をすべてまとめた、COBOLのサンプルプログラムです。
IDENTIFICATION DIVISION.
PROGRAM-ID. READ-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "data.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-RECORD PIC X(50).
WORKING-STORAGE SECTION.
01 END-FLAG PIC X(3) VALUE "NO".
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
PERFORM UNTIL END-FLAG = "YES"
READ IN-FILE
AT END
MOVE "YES" TO END-FLAG
NOT AT END
DISPLAY IN-RECORD
END-PERFORM
CLOSE IN-FILE
STOP RUN.
6. 実行結果の例
たとえば、「data.txt」の中に以下のようなデータがあった場合:
田中 太郎,1000円,東京都
山田 花子,2000円,大阪府
佐藤 一郎,1500円,愛知県
上記のプログラムを実行すると、以下のように表示されます。
田中 太郎,1000円,東京都
山田 花子,2000円,大阪府
佐藤 一郎,1500円,愛知県
7. よくあるエラーとその対策
・ファイルが見つからない
指定したファイル(例:"data.txt")が存在しないと、プログラムはファイルを開けません。実際にそのファイルがあるか確認しましょう。
・CLOSE文を忘れる
ファイルを使い終わったら、CLOSE文で閉じることを忘れないようにしましょう。
・END-FLAGの初期値が間違っている
END-FLAGは"NO"で始める必要があります。"YES"だと1件も読み込まれません。
8. よく使う用語の説明
- レコード:ファイルの中の1行のデータ。人の名前や金額などのまとまり。
- READ:ファイルから1件のレコードを読み込む命令。
- OPEN:ファイルを読み込みや書き込みのために開く命令。
- PERFORM:何度も繰り返し処理をするための命令。
- DISPLAY:文字やデータを画面に表示する命令。
- END-FLAG:ファイルの終わりを判断するための目印。
まとめ
ここまで、COBOLにおけるREAD文の使い方を詳しく学びました。READ文はファイルからデータを1件ずつ読み込むための基本命令で、データの処理や表示、他ファイルへの出力などに欠かせない存在です。特に、OPEN文でファイルを開いてからPERFORMループと組み合わせて使うことで、ファイルの先頭から終わりまで順番に読み込む処理が実現できます。
また、ファイルの終わり(EOF)を判定するためのAT END句や、それをフラグで管理する方法も重要なポイントでした。このフラグ制御を用いれば、ループの終了条件を明確にできるため、プログラムの流れをきちんと制御することができます。
以下は、今回の内容を整理した初心者向けの簡単なサンプルです。ファイルに保存された顧客情報を1行ずつ読み取り、画面に表示するだけの処理ですが、COBOLの基本がぎゅっと詰まったコードです。
IDENTIFICATION DIVISION.
PROGRAM-ID. READ-DEMO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "customer.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 CUSTOMER-REC PIC X(60).
WORKING-STORAGE SECTION.
01 END-FLAG PIC X(3) VALUE "NO".
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
PERFORM UNTIL END-FLAG = "YES"
READ IN-FILE
AT END
MOVE "YES" TO END-FLAG
NOT AT END
DISPLAY "読み込み中:" CUSTOMER-REC
END-PERFORM
CLOSE IN-FILE
STOP RUN.
このコードは、ごく基本的な構造ですが、COBOLプログラミングではよく登場するパターンです。ファイル読み取り処理は、請求書の明細出力や、売上記録の集計など、多くの業務で使われており、確実に身につけておきたい技術の一つです。
プログラムの動きを理解するには、実際にファイルの中身を自分で作って読み込んでみるのが一番です。たとえば「山田太郎,東京都,35歳」といった顧客データを数行だけ入れたテキストファイルを用意して、上のサンプルを動かしてみると、より理解が深まるでしょう。
最初のうちはうまくいかないこともあるかもしれませんが、エラーの内容を見て少しずつ修正していく経験がとても大切です。READ文の動作、AT ENDの意味、PERFORMループとの関係性が自然に理解できるようになると、COBOLのファイル処理が一気に楽しく感じられるようになるはずです。
最後に、ファイルを読み終えたらCLOSE命令でファイルを閉じることを忘れずに。プログラムの終了処理としてのこのひと手間が、プロらしい丁寧なコーディングにつながります。
生徒
「先生、READ文って、ただ1行読み込むだけじゃなくて、フラグとかループと組み合わせて使うんですね!」
先生
「そうなんです。単体でも使えますが、実際の現場ではPERFORMやAT ENDと一緒に活用することがほとんどですね。」
生徒
「END-FLAGの仕組みも分かってきました! 'YES' になるまで繰り返して処理するっていう発想が面白いです。」
先生
「その調子です。次は読み込んだデータを加工したり、別のファイルに書き出したりする処理にも挑戦してみましょう。」
生徒
「はい!まずは今日の内容をしっかり復習して、ファイル読み込み処理に慣れておきます!」