カテゴリ: COBOL 更新日: 2025/12/08

COBOLのマルチファイル処理を完全解説!初心者でもわかるファイルの同時操作

マルチファイル処理のポイントと事例
マルチファイル処理のポイントと事例

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

生徒

「COBOLでは、複数のファイルを同時に扱うことってできますか?」

先生

「はい、できますよ。複数のファイルを一緒に読み込んだり、書き込んだりすることも可能です。」

生徒

「それって難しそうですね…初心者でも理解できますか?」

先生

「もちろんです!ファイルは「本」のようなものだと考えれば、とても分かりやすくなりますよ。順番に説明していきましょう。」

1. マルチファイル処理とは?

1. マルチファイル処理とは?
1. マルチファイル処理とは?

COBOL(コボル)のマルチファイル処理とは、2つ以上のファイルを同時に読み書きすることを指します。たとえば、あるファイルからデータを読み取り、別のファイルに保存したり、2つの異なるファイルを比較して一致するデータだけを出力したりします。

これは、一冊の本を読みながら、別のノートに書き写すようなイメージです。

2. ファイルを複数開く準備をしよう

2. ファイルを複数開く準備をしよう
2. ファイルを複数開く準備をしよう

COBOLで複数のファイルを扱うときは、最初にそれぞれのファイルの情報をENVIRONMENT DIVISIONFILE 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. マルチファイルを使った実用例

3. マルチファイルを使った実用例
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-FLAGEOF2-FLAGは、それぞれのファイルの終わり(EOF)を確認するための「しるし」です。
  • PERFORM UNTILは、両方のファイルをすべて読み終えるまで繰り返し処理します。
  • WRITE OUT-REC FROM IN-REC1は、読み取った内容を出力ファイルに書き出しています。

4. IF文で分岐する場合もある

4. IF文で分岐する場合もある
4. IF文で分岐する場合もある

2つのファイルの中身を比較して、一致するデータだけを出力したい場合など、IF文を使った条件分岐が必要になります。

例え:2冊の名簿を見比べて、同じ名前があったらノートに書く作業です。


IF IN-REC1-NAME = IN-REC2-NAME
    WRITE OUT-REC FROM IN-REC1
END-IF

5. マルチファイル処理の注意点

5. マルチファイル処理の注意点
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. 実行結果のイメージ

6. 実行結果のイメージ
6. 実行結果のイメージ

上の例では、2つの入力ファイルの中身が交互に出力ファイルに書き込まれます。結果のイメージは次のようになります。


山田 太郎,1980年生まれ
佐藤 花子,1990年生まれ
田中 一郎,1975年生まれ
鈴木 次郎,1985年生まれ

7. よくある質問(FAQ)

7. よくある質問(FAQ)
7. よくある質問(FAQ)

Q. マルチファイルって何に使うの?

A. たとえば「売上データ」と「顧客データ」など、複数の情報を同時に処理したいときに使います。

Q. ファイル形式が違ってもいいの?

A. ファイルごとにレイアウトを設定できるので、形式が違っても問題ありません。

Q. 3つ以上のファイルも処理できるの?

A. はい、必要な数だけファイルを定義すれば可能です。ただし、プログラムが複雑になるので注意が必要です。

まとめ

まとめ
まとめ

COBOLのマルチファイル処理は、複数のファイルを同時に読み書きしながら業務データを整理したり結合したりするために重要な技術です。単一ファイルの処理と比べて扱う情報量が増えるため、初心者には少し複雑に感じられることがありますが、基本の考え方を押さえると非常に応用範囲の広い仕組みであることがわかります。特に、2つ以上のファイルを並行して扱うことで、データ比較、統合、抽出、照合といった実務的な操作がスムーズに行えるようになります。ファイルを「本」、レコードを「ページ」、読み書き処理を「ページを読みながら別のノートに書き写す作業」と考えると、学習のハードルがぐっと下がります。 そのうえで大切なのが、ENVIRONMENT DIVISION と FILE SECTION での適切な定義です。マルチファイルを扱うときは、どのファイルがどこにあり、どんなレイアウトを持つのかを正確に指定しておく必要があります。SELECT文でファイルの割り当てを行い、FILE SECTION でレコードの形式を記述することで、COBOLは複数ファイルを問題なく処理できます。これはCOBOLが企業システムで長く使われてきた理由のひとつであり、大量の業務データを整然と扱う力が備わっていることを示しています。 さらに、マルチファイル処理ではEOF(ファイルの終端)をしっかり管理することが欠かせません。複数のファイルはそれぞれ異なる長さや内容を持つため、どのファイルが先に終わったのか判定するためのフラグを用意し、ループ処理の制御に使います。また、IF文で条件を分岐させることで「一致したデータだけを抽出する」など、業務プログラムで必要となる複雑な処理を柔軟に行えます。実際の開発現場では2つどころか、3つ以上のファイルを扱う場面も少なくなく、基礎を身につけることで応用の幅が一気に広がります。 以下に、マルチファイル処理の全体像をつかむためのシンプルなサンプルプログラムをまとめました。記事内で説明した流れと同じ構造を持っているため、復習にも活用できます。

マルチファイル処理のサンプルまとめ


IDENTIFICATION DIVISION.
PROGRAM-ID. MULTI-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT IN-A ASSIGN TO "A.DAT".
    SELECT IN-B ASSIGN TO "B.DAT".
    SELECT OUT-C ASSIGN TO "C.DAT".

DATA DIVISION.
FILE SECTION.
FD IN-A.
01 REC-A PIC X(40).
FD IN-B.
01 REC-B PIC X(40).
FD OUT-C.
01 REC-C PIC X(40).

WORKING-STORAGE SECTION.
01 EOF-A PIC X VALUE "N".
01 EOF-B PIC X VALUE "N".

PROCEDURE DIVISION.
    OPEN INPUT IN-A IN-B
    OPEN OUTPUT OUT-C

    PERFORM UNTIL EOF-A = "Y" AND EOF-B = "Y"
        IF EOF-A NOT = "Y"
            READ IN-A
                AT END MOVE "Y" TO EOF-A
                NOT AT END MOVE REC-A TO REC-C
                              WRITE REC-C
            END-READ
        END-IF

        IF EOF-B NOT = "Y"
            READ IN-B
                AT END MOVE "Y" TO EOF-B
                NOT AT END MOVE REC-B TO REC-C
                              WRITE REC-C
            END-READ
        END-IF
    END-PERFORM

    CLOSE IN-A IN-B OUT-C
    STOP RUN.

このプログラムは、2つの入力ファイルを順に読み込み、その内容をひとつの出力ファイルへ書き出す処理の基本形です。実務ではこれに条件分岐を加えて、特定のデータだけ抽出したり、名寄せ処理を行ったり、複数のレコードを組み合わせたりします。特に名簿データや売上情報、商品マスタなど複数のデータベースを扱う業務システムでは、マルチファイル処理は避けて通れない技術です。 また、ファイルのOPENとCLOSEを必ず忘れずに行うこと、EOFの管理を正確にすること、レコード形式を事前にしっかり決めておくことは、マルチファイル処理の基礎を支える重要なポイントです。これらを丁寧に扱う習慣がつけば、COBOLのファイル処理全体が格段に理解しやすくなります。業務システムでは大量のデータを扱うため、ファイル処理の正確さと効率性が品質に直結します。マルチファイルを自在に扱えるようになることで、COBOLエンジニアとしての実力も確実に向上するでしょう。

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

生徒

「複数のファイルを扱うと聞いて最初は難しそうだと思いましたが、EOFのチェックやIF文での分岐を組み合わせることで、意外とシンプルに書けるんですね!」

先生

「その通りです。大事なのは“どのファイルが今どの状態か”をしっかり把握しながら処理を進めることなんです。そこさえ意識できれば、難しい処理でもきちんと組み立てられますよ。」

生徒

「FILE SECTION の定義も重要だとわかりました。レコードの形を決めないと処理がうまく行かないんですね。」

先生

「正しい理解ですね。COBOLは“事前に定義してから処理する”という仕組みがしっかりしているので、そこを丁寧に押さえるとぐっと楽になりますよ。」

生徒

「名寄せ処理やデータ統合など、実務で使えそうな場面がいろいろ思い浮かびました!」

先生

「その発想はとても良いです。マルチファイル処理は業務システムでは欠かせないので、ぜひ今回の知識を土台にして経験を積んでいってくださいね。」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.8
Java&Spring記事人気No8
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決