COBOLのマルチファイル処理を完全解説!初心者でもわかるファイルの同時操作
生徒
「COBOLでは、複数のファイルを同時に扱うことってできますか?」
先生
「はい、できますよ。複数のファイルを一緒に読み込んだり、書き込んだりすることも可能です。」
生徒
「それって難しそうですね…初心者でも理解できますか?」
先生
「もちろんです!ファイルは「本」のようなものだと考えれば、とても分かりやすくなりますよ。順番に説明していきましょう。」
1. マルチファイル処理とは?
COBOL(コボル)のマルチファイル処理とは、2つ以上のファイルを同時に読み書きすることを指します。たとえば、あるファイルからデータを読み取り、別のファイルに保存したり、2つの異なるファイルを比較して一致するデータだけを出力したりします。
これは、一冊の本を読みながら、別のノートに書き写すようなイメージです。
2. ファイルを複数開く準備をしよう
COBOLで複数のファイルを扱うときは、最初にそれぞれのファイルの情報をENVIRONMENT DIVISIONとFILE SECTIONで定義します。
ENVIRONMENT DIVISIONでは、ファイルの場所や種類を設定し、FILE SECTIONではファイルの中身の形を指定します。
SELECT IN-FILE1 ASSIGN TO "DATA1.DAT".
SELECT IN-FILE2 ASSIGN TO "DATA2.DAT".
SELECT OUT-FILE ASSIGN TO "RESULT.DAT".
3. マルチファイルを使った実用例
ここでは、2つの入力ファイルからデータを読み取り、その内容をひとつの出力ファイルにまとめる例を紹介します。
例え:2冊の本を交互に読みながら、重要な部分を1冊のノートにまとめる作業です。
MOVE "NO" TO EOF1-FLAG.
MOVE "NO" TO EOF2-FLAG.
PERFORM UNTIL EOF1-FLAG = "YES" AND EOF2-FLAG = "YES"
IF EOF1-FLAG = "NO"
READ IN-FILE1
AT END MOVE "YES" TO EOF1-FLAG
NOT AT END WRITE OUT-REC FROM IN-REC1
END-READ
END-IF
IF EOF2-FLAG = "NO"
READ IN-FILE2
AT END MOVE "YES" TO EOF2-FLAG
NOT AT END WRITE OUT-REC FROM IN-REC2
END-READ
END-IF
END-PERFORM
ポイント解説:
EOF1-FLAGとEOF2-FLAGは、それぞれのファイルの終わり(EOF)を確認するための「しるし」です。PERFORM UNTILは、両方のファイルをすべて読み終えるまで繰り返し処理します。WRITE OUT-REC FROM IN-REC1は、読み取った内容を出力ファイルに書き出しています。
4. IF文で分岐する場合もある
2つのファイルの中身を比較して、一致するデータだけを出力したい場合など、IF文を使った条件分岐が必要になります。
例え:2冊の名簿を見比べて、同じ名前があったらノートに書く作業です。
IF IN-REC1-NAME = IN-REC2-NAME
WRITE OUT-REC FROM IN-REC1
END-IF
5. マルチファイル処理の注意点
COBOLでマルチファイル処理を行う際に注意すべきポイントを紹介します。
- ファイルをOPENし忘れない:すべてのファイルを最初に
OPENしておかないと、読み書きできません。 - ファイルのCLOSEも忘れずに:処理が終わったら、
CLOSE文でファイルを閉じる必要があります。 - EOFの扱い:どのファイルが終わったのかを個別に判断して、正しくループを抜ける必要があります。
OPEN INPUT IN-FILE1 IN-FILE2
OPEN OUTPUT OUT-FILE
...(読み書き処理)...
CLOSE IN-FILE1
CLOSE IN-FILE2
CLOSE OUT-FILE
6. 実行結果のイメージ
上の例では、2つの入力ファイルの中身が交互に出力ファイルに書き込まれます。結果のイメージは次のようになります。
山田 太郎,1980年生まれ
佐藤 花子,1990年生まれ
田中 一郎,1975年生まれ
鈴木 次郎,1985年生まれ
7. よくある質問(FAQ)
Q. マルチファイルって何に使うの?
A. たとえば「売上データ」と「顧客データ」など、複数の情報を同時に処理したいときに使います。
Q. ファイル形式が違ってもいいの?
A. ファイルごとにレイアウトを設定できるので、形式が違っても問題ありません。
Q. 3つ以上のファイルも処理できるの?
A. はい、必要な数だけファイルを定義すれば可能です。ただし、プログラムが複雑になるので注意が必要です。