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

COBOLのファイル処理総合サンプル|初心者向け 入出力・ループ・エラー・パフォーマンス対策

ファイル処理の総合サンプルプログラム例
ファイル処理の総合サンプルプログラム例

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

生徒

「COBOLでファイルを読み込んで加工して、新しいファイルに書き出す処理を一通りやってみたいです!」

先生

「それは良い練習ですね。読み込み(READ)、終端検出(EOF)、エラー対応、書き込み(WRITE)、ループ、最後に閉じる(CLOSE)まで一連の流れを実装してみましょう。」

生徒

「パソコン初心者でもわかるように、ゆっくりお願いします!」

1. サンプルプログラムの概要

1. サンプルプログラムの概要
1. サンプルプログラムの概要

このサンプルでは、次のようなファイル処理を行います:

  • input.dat を読み込み
  • 顧客IDが1000以上だったら output.dat に書き出す
  • EOF(ファイルの終わり)を検出してループ終了
  • ファイルステータスでエラーをチェック
  • 最後にファイルを閉じる

初心者向けキーワード:ファイル処理、EOF検出、エラー処理、コボル 入出力、ループ制御。

2. 完全なサンプルコード

2. 完全なサンプルコード
2. 完全なサンプルコード

IDENTIFICATION DIVISION.
PROGRAM-ID. FILE-TEST.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT IN-FILE ASSIGN TO "input.dat"
        ORGANIZATION IS LINE SEQUENTIAL
        FILE STATUS IS WS-FS-IN.
    SELECT OUT-FILE ASSIGN TO "output.dat"
        ORGANIZATION IS LINE SEQUENTIAL
        FILE STATUS IS WS-FS-OUT.

DATA DIVISION.
FILE SECTION.
FD IN-FILE
    RECORD CONTAINS 80 CHARACTERS.
01 IN-REC PIC X(80).
FD OUT-FILE
    RECORD CONTAINS 80 CHARACTERS.
01 OUT-REC PIC X(80).

WORKING-STORAGE SECTION.
01 WS-FS-IN    PIC XX.
01 WS-FS-OUT   PIC XX.
01 EOF-FLAG    PIC X VALUE 'N'.
01 CUSTOMER-ID PIC 9(4).
01 WS-DATA     PIC X(80).

PROCEDURE DIVISION.
MAIN-LOGIC.
    OPEN INPUT IN-FILE
         OUTPUT OUT-FILE
    IF WS-FS-IN NOT = "00" OR WS-FS-OUT NOT = "00"
        DISPLAY "ファイルオープン失敗 FS-IN:" WS-FS-IN " FS-OUT:" WS-FS-OUT
        STOP RUN
    END-IF

    PERFORM UNTIL EOF-FLAG = 'Y'
        READ IN-FILE INTO WS-DATA
            AT END MOVE 'Y' TO EOF-FLAG
            INVALID KEY
                DISPLAY "読み込みエラー FS-IN:" WS-FS-IN
                MOVE 'Y' TO EOF-FLAG
        END-READ
        IF EOF-FLAG = 'N'
            MOVE WS-DATA(1:4) TO CUSTOMER-ID
            IF CUSTOMER-ID >= 1000
                MOVE WS-DATA TO OUT-REC
                WRITE OUT-REC
                IF WS-FS-OUT NOT = "00"
                    DISPLAY "書き込み失敗 FS-OUT:" WS-FS-OUT
                END-IF
            END-IF
        END-IF
    END-PERFORM

    CLOSE IN-FILE OUT-FILE
    DISPLAY "処理終了"
    STOP RUN.
END PROGRAM FILE-TEST.

3. 各部分の解説

3. 各部分の解説
3. 各部分の解説
  • SELECT ~ FILE STATUS:ファイルを開いた後に、エラー番号(FILE STATUSコード)を確認できます。
  • OPEN INPUT/OUTPUT:ファイルの読み込み/書き込みの開始。
  • PERFORM UNTIL EOF-FLAG:EOFまで何度も繰り返すループ。
  • READ … AT END:ファイル終端に達したときにEOFを設定。
  • INVALID KEY:読み込みで問題があるときに停止します。
  • IF CUSTOMER-ID >= 1000:条件分岐して、必要なデータだけ書き出します。
  • WRITE OUT-REC:出力ファイルへの書き込み。
  • CLOSE:最後にファイルをきちんと閉じる。

4. 実行結果イメージ

4. 実行結果イメージ
4. 実行結果イメージ

(処理中の画面表示例)
処理終了

また、output.datには、条件を満たす行だけが書き出されます。

5. 初心者向けポイント&豆知識

5. 初心者向けポイント&豆知識
5. 初心者向けポイント&豆知識
  • FILE STATUSでオープン、読み書きのエラーが起きたかすぐわかる
  • EOF検出を入れることで、最後まで読み取れる
  • 条件分岐で必要なデータだけ処理できる
  • 一度OPENして、最後にCLOSEをすればパフォーマンスもよくなる
  • INVALID KEYで読み込みの不正を検出できる

初心者の方でも、ファイル処理の流れがこの一例で理解できるようになっています。

まとめ

まとめ
まとめ

COBOLでのファイル処理は、実際の業務システムにおいて欠かせない基礎であり、読み込み、条件分岐、エラー検出、繰り返し、書き込み、終了処理といった複数の要素が丁寧につながって動いています。今回の記事では、入力ファイルを順番に読み取りながら必要な行だけを出力ファイルへ転送する一連の処理を通して、ファイルオープンからクローズまでの流れを自然に理解できるように整理してきました。特に、EOF判定を行いながらループを制御する考え方は、ファイル処理の中心となる動きであり、データをひとつずつ確実に扱うための重要な手段になります。さらに、FILE STATUSを確認しながらエラーを検出する方法も、業務システムでは必須の考え方です。思わぬ入力不備やファイル破損に遭遇しても、安全に停止させたり、続行可能な状態を判断できるようになります。 そして、今回のサンプルで利用したPERFORM UNTILのループは、ファイル終端を検出するまで繰り返し処理を続けるという構造を自然に体験できるため、初心者の方が最初につまずきがちな「繰り返し処理」「条件付き処理」「終端処理」の3つを一度に学べる利点があります。顧客IDが一定の値以上であれば出力するという条件分岐も、実際の業務データに近い形で理解できるため、実践的な感覚を身につける支えになります。値を条件として抽出したり加工したりする処理は、日々の業務において非常によく使われる型ですので、今回の例を土台にして、自分なりに条件を増やしたり、複数の項目を組み合わせたりする練習にも発展させやすいでしょう。 また、ファイルを開く際と閉じる際にはパフォーマンス上の注意点も含まれていました。一度だけOPENし、必要な処理が終わったタイミングでCLOSEすることで、無駄なリソース消費を避け、安定した動作を維持できます。大規模なデータを扱う処理では特に重要で、データ量が増えるほど、こうした細かな配慮が全体の処理時間に大きく影響します。OPENとCLOSEは単なる準備と後片付けのように見えますが、プログラム全体の品質に強く関わる大事な部分です。 今回扱った内容を振り返ると、COBOLのファイル処理は単純な読み書きだけでなく、複数の項目がつながって初めて安全で信頼性の高い処理になります。読み取り、分岐、加工、出力、それらを支えるループ制御とエラー検出という流れをひとつずつ確認しながら動作を理解することで、実務で求められる品質や構造に自然と近づいていきます。ここでは、今回学んだ内容を踏まえて、さらに理解を深めるための応用サンプルを用意しました。実際の職場で遭遇するような追加処理を含めているため、より複雑なファイル処理のイメージをつかむ練習になるはずです。

応用サンプル:入力データを加工してログ出力も行う例

条件を満たすデータを書き出すだけでなく、処理内容をログとして記録する例です。ファイル処理を複数組み合わせる場面は、実務で特に多くなります。


       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-ADV.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT IN-FILE ASSIGN TO "input.dat"
                 ORGANIZATION IS LINE SEQUENTIAL
                 FILE STATUS IS FS-IN.
           SELECT OUT-FILE ASSIGN TO "output.dat"
                 ORGANIZATION IS LINE SEQUENTIAL
                 FILE STATUS IS FS-OUT.
           SELECT LOG-FILE ASSIGN TO "log.txt"
                 ORGANIZATION IS LINE SEQUENTIAL
                 FILE STATUS IS FS-LOG.

       DATA DIVISION.
       FILE SECTION.
       FD IN-FILE.
       01 IN-DATA PIC X(80).
       FD OUT-FILE.
       01 OUT-DATA PIC X(80).
       FD LOG-FILE.
       01 LOG-REC PIC X(120).

       WORKING-STORAGE SECTION.
       01 FS-IN PIC XX.
       01 FS-OUT PIC XX.
       01 FS-LOG PIC XX.
       01 END-FLAG PIC X VALUE "N".
       01 CID PIC 9(4).

       PROCEDURE DIVISION.
       MAIN-PROC.
           OPEN INPUT IN-FILE
                OUTPUT OUT-FILE
                OUTPUT LOG-FILE
           PERFORM UNTIL END-FLAG = "Y"
               READ IN-FILE INTO IN-DATA
                   AT END MOVE "Y" TO END-FLAG
               END-READ
               IF END-FLAG = "N"
                   MOVE IN-DATA(1:4) TO CID
                   IF CID >= 1000
                       MOVE IN-DATA TO OUT-DATA
                       WRITE OUT-DATA
                       STRING "出力処理 ID=" CID INTO LOG-REC
                       WRITE LOG-REC
                   END-IF
               END-IF
           END-PERFORM
           CLOSE IN-FILE OUT-FILE LOG-FILE
           STOP RUN.

この応用サンプルでは、元データを加工しながら別ファイルへ書き出し、さらに処理内容をログとして残しています。複数のファイルを扱いながら条件分岐と繰り返し処理を組み合わせて動かすことで、より実践的なファイル処理の姿を学べます。また、ログを残すことで後から処理内容を追跡できるため、実務の保守性にもつながります。こうした補助的な処理は、開発現場でも非常によく使われるため、早い段階で慣れておくと大きな力になります。

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

生徒

「ひとつのサンプルで読み込み、条件判定、書き込み、ログ出力まで全部動くと、流れがすごく分かりやすいです。」

先生

「そうですね。COBOLのファイル処理は流れを意識すれば自然と理解できるようになりますよ。」

生徒

「EOFを使ったループ処理も、実際に動作を追ってみると難しくないと感じました。」

先生

「繰り返しの仕組みが分かると、業務データの処理にもすぐ応用できますからね。」

生徒

「今回の応用サンプルみたいにログも残せると、実際のシステムに近い感じで勉強になります!」

先生

「その調子です。ファイル処理はひとつ覚えるだけで一気に世界が広がりますよ。」

カテゴリの一覧へ
新着記事
New1
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New2
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New3
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New4
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
人気記事
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#で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でアプリが止まる問題を解決