COBOLプログラムのパターンを学ぼう!「1対1のマッチング処理」| 応用ガイド
COBOL(コボル)言語の1対1のマッチング処理とは
COBOL(コボル)言語の「1対1のマッチング処理」とは?
例えば社員の基本情報を持つマスターファイルがあるとします。このマスターファイルは社員番号がキーとなっており他の社員番号とは重複しないファイルになります。次にトランザクションファイルを考えてみます。
例えば社員が2025年に取得した資格情報を持つファイルがあるとします。このトランザクションファイルも社員番号がキーとなっています。このように同じユニークな社員番号をレコードとして持つファイル同士のマッチング処理を1対1のマッチング処理と言います。では早速プログラムを作成してみましょう。
COBOL(コボル)言語の「1対1のマッチング処理」の処理構成
今回用意したサンプルプログラムの説明をします。このサンプルプログラムは、マスターファイルとトランザクションファイルをそれぞれ読み込み、マッチングキーとして6桁の社員番号を比較していくというプログラムになります。
①社員番号がマッチした場合は、In01のマスターファイルの「社員番号とマッチ」したことがわかるようにメッセージを出力します。その後、次のIn01のレコードを読み込んで再度マッチング処理を行います。
②社員番号がアンマッチの場合は、In01のマスタ?ファイルの「社員番号とアンマッチ」したことがわかるようにメッセージを出力します。その後、次のIn02のレコードを読み込んで再度マッチング処理を行います。
1対1のマッチング処理はこのように①②の処理を繰り返した後、In01のマスターファイルのレコードが読めなくなった場合に処理を終了させます。
使用例:
※マスターファイルとトランザクションファイルはそれぞれキー項目でユニークなレコードになっており、キー項目でソートされている事が前提の処理になっています。
In01.txt
In02.txt
実行結果:
COBOL(コボル)「1対1のマッチング処理」の応用的な使い方
1対1のマッチング処理の基本的な処理構成と使い方について理解いただけたでしょうか。今度は、応用的な使い方について考えていきましょう。先程ご紹介したサンプルプログラムはIN01のマスターファイルを更新する処理はありませんでしたが、一般的な業務プログラムでは定期的にマスターファイルを更新していることが少なくありません。
今回は1対1のマッチング処理の後にIn02トランザクションファイルの2025年の資格取得数をIn01マスターファイルの資格数に加算して新しいマスターファイル(Out01)を作成するというプログラムを作ってみましょう。しっかり内容を理解して実際のプログラム作成に活用いただければと思います。
サンプルプログラム:
- IDENTIFICATION DIVISION.
- PROGRAM-ID. MATCH11_SAMPLE02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT IN01-FILE
- ASSIGN TO "in01.txt"
- ORGANIZATION IS LINE SEQUENTIAL.
- SELECT IN02-FILE
- ASSIGN TO "in02.txt"
- ORGANIZATION IS LINE SEQUENTIAL.
- SELECT OUT01-FILE
- ASSIGN TO "out01.txt"
- ORGANIZATION IS LINE SEQUENTIAL.
- DATA DIVISION.
- FILE SECTION.
- FD IN01-FILE.
- 01 IN01.
- 03 IN01-KEY PIC X(06).
- 03 IN01-SHIKAKU-SU PIC 99.
- FD IN02-FILE.
- 01 IN02.
- 03 IN02-KEY PIC X(06).
- 03 IN02-SHIKAKU-SU2025 PIC 9.
- FD OUT01-FILE.
- 01 OUT01.
- 03 OUT01-KEY PIC X(06).
- 03 OUT01-SHIKAKU-SU PIC 99.
- WORKING-STORAGE SECTION.
- 01 SW-AREA.
- 03 SW-IN01-END PIC X(01).
- 01 CST-AREA.
- 03 CST-1X PIC X(01) VALUE '1'.
- PROCEDURE DIVISION.
- *> -------------------------------------------
- MATCH-RTN SECTION.
- *> 初期処理
- PERFORM INIT-RTN.
- *> 主処理
- PERFORM MAIN-RTN
- UNTIL SW-IN01-END = CST-1X.
- *> 終了処理
- PERFORM END-RTN.
- STOP RUN.
- MATCH-EXIT.
- *> -------------------------------------------
- *> 1.初期処理(ファイルオープン)
- INIT-RTN SECTION.
- OPEN INPUT IN01-FILE.
- OPEN INPUT IN02-FILE.
- OPEN OUTPUT OUT01-FILE.
- PERFORM READ01-RTN.
- PERFORM READ02-RTN.
- INIT-EXIT.
- *> -------------------------------------------
- *> 2.ファイル読み込み処理(IN01)
- READ01-RTN SECTION.
- *> 入力ファイルREAD
- READ IN01-FILE AT END
- DISPLAY "READ IN01 END"
- MOVE CST-1X TO SW-IN01-END
- GO TO READ01-EXIT
- END-READ.
- READ01-EXIT.
- *> -------------------------------------------
- *> 3.ファイル読み込み処理(IN02)
- READ02-RTN SECTION.
- *> 入力ファイルREAD
- READ IN02-FILE AT END
- MOVE HIGH-VALUE TO IN02-KEY
- GO TO READ02-EXIT
- END-READ.
- READ02-EXIT.
- *> -------------------------------------------
- *> 4.主処理(マッチング処理)
- MAIN-RTN SECTION.
- IF IN01-KEY = IN02-KEY
- THEN
- MOVE IN01-KEY TO OUT01-KEY
- COMPUTE OUT01-SHIKAKU-SU = IN01-SHIKAKU-SU + IN02-SHIKAKU-SU2025
- WRITE OUT01
- PERFORM READ01-RTN
- ELSE
- IF IN01-KEY < IN02-KEY
- THEN
- MOVE IN01 TO OUT01
- WRITE OUT01
- PERFORM READ01-RTN
- END-IF
- IF IN01-KEY > IN02-KEY
- PERFORM READ02-RTN
- END-IF
- END-IF.
- MAIN-EXIT.
- *> -------------------------------------------
- *> 5.終了処理(ファイルクローズ)
- END-RTN SECTION.
- CLOSE IN01-FILE.
- CLOSE IN02-FILE.
- CLOSE OUT01-FILE.
- END-EXIT.
- *> -------------------------------------------
- END PROGRAM MATCH11_SAMPLE02.
In01.txt
In02.txt
Out01.txt
実行結果:
練習問題
最後に練習問題にチャレンジしてみましょう。
問)
先程の応用プログラムではマスターファイルの更新のみを行いました。実際の業務ではマッチした情報の更新を行うだけでなく、アンマッチした情報の分析なども行うことがあります。アンマッチした時にOut02ファイルに社員番号がわかるように出力するにはどのようにプログラムを修正すればいいでしょうか?
答え)
以下のように処理を変更します。
まずファイル定義についてOut02の定義を行います。追加イメージはOut01の定義を参考にしてみてください。PROCEDURE DIVISION以降は追加したOut02のファイルオープン、クローズ処理を追加します。
あとはアンマッチ処理を修正します。「MOVE IN01 TO OUT01」「WRITE OUT01」行を「MOVE IN01 TO OUT02」「WRITE OUT02」とすればアンマッチ分だけのファイルを作成することができます。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典