マッチング処理のロジックと実装方法

COBOL

今回は、バッチプログラムで使われるロジックの一つである「マッチング処理」について説明します。
「マッチング処理」とは特にCOBOLではよく目にするロジックであり、マスタデータ(業務の基盤となるデータ。商品一覧、取引先一覧等。)とトランザクションデータ(業務で日々発生するデータ。販売履歴、入金履歴等。)を突き合わせる処理です。
マッチング処理を覚えておけば、実業務でバッチプログラムを作る時のヒントになりますし、開発者同士のコミュニケーションもスムーズになります。

突き合わせを行う時は、マスタデータとトランザクションデータで同じキー項目(商品コード、取引先コード等)を使用し、そのキー項目で昇順にソートした後、マスタデータとトランザクションデータを1件ずつ読み、キー項目が一致するかどうかで突き合わせを行います。
マスタデータとトランザクションデータでキー項目が一致した場合(マスタで管理しているもので取引が発生した)と、マスタのみキー項目が存在している場合(マスタで管理しているが取引は発生しなかった)は正常ケースですが、トランザクションのみキー項目が存在している場合(マスタで管理していないものが取引された)は異常ケースとなります。

マスタデータの一つのキー項目に対して、トランザクションデータの0~1つのレコードが対応する場合は、1対1マッチングと呼ばれます。2つ以上のレコードが対応することがある場合は1対nマッチングと呼ばれ、処理が少しだけ複雑になります。

フローチャートと例は以下の通りとなります。

【フローチャート】

【例】

・要件

商品名が管理されている商品マスタと、商品の販売履歴(トランザクション)をファイル形式で読み込み、商品名と販売日を別ファイルで出力したい。

・商品マスタのフォーマット

カンマ区切りの固定長ファイル。
商品コードでレコードを一意に特定できるようにデータをセットする。

・販売履歴のフォーマット

カンマ区切りの固定長ファイル。
商品コード・販売日でレコードを一意に特定できるようにデータをセットする。

・出力ファイルのフォーマット

・商品マスタのレコード

・販売履歴のレコード

・処理の流れ

・出力ファイル


以上、「マッチング処理」でした。
少し複雑なロジックですが、ファイルをキーの昇順に並べて順番に読み込むことと、キーがマッチする場合・しない場合は具体的にどのような状況なのかをイメージすることがポイントになります。

次回は、サンプルプログラムを書いてより具体的に説明したいと思います。
では、また来週!

コメント

  1. アワリティア より:

    キー項目がマスタ(0000004)<トラン(最大値)の最大値とは何ですか?具体的にこの場合何が入っているのでしょうか?それとマスタが0000006の場合符号は変わりますか?

  2. 伊東 輝 より:

    ご質問ありがとうございます。

    > キー項目がマスタ(0000004)<トラン(最大値)の最大値とは何ですか?具体的にこの場合何が入っているのでしょうか?それとマスタが0000006の場合符号は変わりますか?

    「最大値」とは、COBOLの場合は「HIGH-VALUE」を指します。
    16進数で言うと、0000004 は 0x30303030303004 となり、HIGH-VALUE は 0xFFFFFFFFFFFFFF となります。
    ここで、マスタが 0000006 だとしても符号は変わりません。数値の場合は最大でも 9999999(0x39393939393939)なので、HIGH-VALUE以上の値になることはありません。

タイトルとURLをコピーしました