マッチング処理のサンプルプログラム

マッチング処理(マスタデータとトランザクションデータを突き合わせる)のロジックについて、前回の記事で紹介しました。
サンプルプログラムを作成しましたので、参考までに紹介します。
言語はCOBOL(opensource COBOL)です。

【サンプルプログラム】

【マスタファイル】

・C:\tmp\a.txt

【トランザクションファイル】

・C:\tmp\b.txt

【出力ファイル】

・C:\tmp\c.txt

【標準出力】


いかがでしたでしょうか。

マッチング処理はそこそこ複雑なロジックなので、マッチング処理を使用するプログラムを前知識無しで目にすると戸惑うと思います。
しかし、前回の記事で紹介したフローが頭に入っていれば、プログラムも読めるようになると思います。
業務で開発するバッチプログラムでは頻出のロジックなので、前回の記事の内容と合わせて頭に入れておくことをお勧めします。

これからも、実務で役に立つ情報をお伝えできればと思います。
では、また来週!

マッチング処理のロジック

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

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

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

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

【フローチャート】

【例】

・要件

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

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

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

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

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

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

・商品マスタのレコード

・販売履歴のレコード

・処理の流れ

・出力ファイル


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

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

コントロールブレイクのサンプルプログラム

コントロールブレイク(キー項目が変わる度に何らかの処理を実行)のロジックについて、前回の記事で紹介しました。
サンプルプログラムを作成しましたので、参考までに紹介します。
言語はCOBOL(opensource COBOL)です。

【サンプルプログラム】

【入力ファイル】

・C:\tmp\a.txt

【出力ファイル】

・C:\tmp\b.txt


いかがでしたでしょうか。
前回の記事ではプログラムまでは作成しなかったので、今回の記事ではプログラムも作成してみました。

今回はCOBOLでプログラムを作成したので、java等の他の言語を学んできた方にはわかりにくかったかもしれません。
しかし、COBOLは自然言語に近い書き方ができるという特徴があるので、経験が浅い方でもなんとなく雰囲気を感じ取ってもらえるのではないか、と個人的には思っています。
また、コントロールブレイクを使用する現場ではCOBOL資産に触れる機会が少なくないので、その意味でも慣れておいて損はないと思っています。

次回は、コントロールブレイクと並んで使用されることが多いロジックであるマッチングについて書いていきたいと思います。
では、また来週!

コントロールブレイクのロジック

今回の記事では、バッチプログラムで使われるロジックの一つである「コントロールブレイク」について説明します。
「コントロールブレイク」とは特にCOBOLではよく目にするロジックであり、キー項目(「商品番号」「顧客番号」「カード番号」等)順にソートされたデータに対して、キー項目が変わる度にタイトル出力や改ページ等を行うロジックです。
トランザクションファイル・トランザクションテーブル(履歴ファイル・履歴テーブル)を読み込み、帳票やハガキ等を出力する時に使われることが多いです。

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

【フローチャート】

【例】

・要件

商品の販売実績のデータをまとめたファイルを読み込み、商品毎にタイトルを付与して、別のファイルに出力したい。

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

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

・入力ファイルのレコード

・タイトル行のフォーマット

・処理の流れ

・出力ファイル


以上、「コントロールブレイク」でした。
このロジックを覚えておくと、バッチ処理を設計するのが楽になります。
プログラミングだけでなくExcelの資料作りにも役立つことがあり、意外と応用も効きます。

これまでも週1でブログを更新してきましたが、今後もこのような記事を週1ペースで書いていきたいと思います。
では、また来週!

java:暗黙の型変換による意図しない小数点以下切り捨て

原因がわかるまでに手間取ってしまったので、記事として残しておきます。
double型やBigDecimal型の変数の初期値を分数(例:2/3)で定義する際、小数点を入れないと「int型変数/int型変数」と判断されてしまい、小数点以下が切り捨てられた状態で変数に格納されてしまいます。
「2.0/3.0」なら可なのですが、「2/3」は不可です。

以下、サンプルコードです。

【失敗例】

・ソースコード

・実行結果

【成功例】

・ソースコード

・実行結果