はじめに
前回は、COBOLプログラミングでは最初に研修でやるというお決まりの「DISKtoDISK」プログラムを解説しました。今回は2つの入力ファイルを突合せるマッチング処理についてコーディングをし、OpenCOBOLの動作を確認します。
前回の記事
対象読者
前回をご覧になり、もう少し複雑な処理のコーディング例を見ておきたいと考えられた方、また当稿ではLinux環境を前提として解説しているので、Linuxコマンドが多少分かる方を対象といたします。
必要な環境
OpenCOBOL開発環境が必要です。LinuxにおけるOpenCOBOL開発環境の構築は、COBOL言語をLinux環境で動かすを参照ください。COBOLソースを開発環境のマシンに作成します。プログラムソースは使い慣れたローカルマシンでも作成できますので、お好みの入力環境を用意してください。
サンプルプログラムの作成 1
今回作成するプログラム機能の概要(入出力構成)
今回作成するプログラムの入出力構成を以下の図に示します。
商品のマスタデータと売り上げデータを入力し、売り上げの集計とマスタ未登録データを出力します。また、入力の2ファイルは商品コードでソートされている前提とします。
今回作成するプログラム機能の概要(処理概要)
今回作成するプログラムは、1:nのマッチング処理です。マスタデータ1つのレコードに対し、複数の売り上げデータがあり、それらを集計して売り上げファイルに出力します。なお、マスタデータに商品コード登録の無い売り上げデータは、レコードの内容をそのままエラーデータに出力します。
マスタデータ(入力ファイル)
マスタデータのフィールド構成は次のとおりとします。
- 商品コード…5桁
- 商品名…20桁
- 単価…7桁(内小数点以下2桁)
以下は本稿で使用したマスタデータです。
00000SHOUHIN-0000 0100**a0010001 00010SHOUHIN-1000 0110**00015015 00020SHOUHIN-2000 0120**00020011 00030SHOUHIN-3000 0130**00100012 00040SHOUHIN-4000 0140**00090043 00050SHOUHIN-5000 0150**00085001 00060SHOUHIN-6000 0160**00110002 00070SHOUHIN-7000 0170**00033003 00080SHOUHIN-8000 0180**00200004 00090SHOUHIN-9000 0190**00140005 00100SHOUHIN-A000 0200**00009006 12345123456789012345678901234567
マスタデータ1行目のレコード内容は次のとおりです
- 00000(商品コード)
- SHOUHIN-0000 0100**a(商品名)
- 0010001(単価、100.01円)
売り上げデータ(入力ファイル)
売り上げデータのフィールド構成は次のとおりとします。
- 商品コード…5桁
- 売上日付…8桁
- 売上個数…5桁
以下は本稿で使用した売上データです。
000002008060100001 000002008060200010 000012008060100015 000502008060500007 000502008060700020 000502008061100016 100502008060599999
売上データ1行目のレコード内容は次のとおりです
- 00000(商品コード)
- 20080601(売上日付、2008年6月1日)
- 00001(売上個数、1個)
集計データ(出力ファイル)
集計データのフィールド構成は次のとおりとします。
- 商品コード…5桁
- 商品名…20桁
- 単価…ZZZZ9.99
- 売上個数…ZZZ,ZZ9
- 売上金額…ZZ,ZZZ,ZZ9.99
商品コードと商品名はマスタデータで読み込んだレコードからそのまま出力します。価格はマスタデータで読み込んだレコードの価格をゼロサプレスします。
売上個数は同一商品コードの売上データを集計してゼロサプレスします。売上金額は売上個数に単価を掛けたものでゼロサプレスします。
期待する内容は次のとおりです。
00000SHOUHIN-0000 0100**a 100.01 11 1,100.11 00010SHOUHIN-1000 0110**0 150.15 0 0.00 00020SHOUHIN-2000 0120**0 200.11 0 0.00 00030SHOUHIN-3000 0130**0 1000.12 0 0.00 00040SHOUHIN-4000 0140**0 900.43 0 0.00 00050SHOUHIN-5000 0150**0 850.01 43 36,550.43 00060SHOUHIN-6000 0160**0 1100.02 0 0.00 00070SHOUHIN-7000 0170**0 330.03 0 0.00 00080SHOUHIN-8000 0180**0 2000.04 0 0.00 00090SHOUHIN-9000 0190**0 1400.05 0 0.00 00100SHOUHIN-A000 0200**0 90.06 0 0.00 123451234567890123456789012345.67 0 0.00
ゼロサプレスされているのでぐっと見やすくなっています。
エラーデータ(出力ファイル)
エラーデータは、マスタデータとマッチングしない売上データをそのまま出力します。
期待する内容は次のとおりです。
000012008060100015 100502008060599999