Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

COBOLプログラミング ファイル処理編その2

OpenCOBOLを使用したファイル処理の基本プログラミング

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/07/16 14:00

ダウンロード サンプルソース (2.0 KB)

事務処理定番である、2つのファイルのマッチング処理をコーディングしてOpenCOBOLの動作を確認します。

目次

はじめに

 前回は、COBOLプログラミングでは最初に研修でやるというお決まりの「DISKtoDISK」プログラムを解説しました。今回は2つの入力ファイルを突合せるマッチング処理についてコーディングをし、OpenCOBOLの動作を確認します。

前回の記事

対象読者

 前回をご覧になり、もう少し複雑な処理のコーディング例を見ておきたいと考えられた方、また当稿ではLinux環境を前提として解説しているので、Linuxコマンドが多少分かる方を対象といたします。

必要な環境

 OpenCOBOL開発環境が必要です。LinuxにおけるOpenCOBOL開発環境の構築は、COBOL言語をLinux環境で動かすを参照ください。COBOLソースを開発環境のマシンに作成します。プログラムソースは使い慣れたローカルマシンでも作成できますので、お好みの入力環境を用意してください。

サンプルプログラムの作成 1

今回作成するプログラム機能の概要(入出力構成)

 今回作成するプログラムの入出力構成を以下の図に示します。

 商品のマスタデータと売り上げデータを入力し、売り上げの集計とマスタ未登録データを出力します。また、入力の2ファイルは商品コードでソートされている前提とします。

今回作成するプログラム機能の概要(処理概要)

 今回作成するプログラムは、1:nのマッチング処理です。マスタデータ1つのレコードに対し、複数の売り上げデータがあり、それらを集計して売り上げファイルに出力します。なお、マスタデータに商品コード登録の無い売り上げデータは、レコードの内容をそのままエラーデータに出力します。

マスタデータ(入力ファイル)

 マスタデータのフィールド構成は次のとおりとします。

  1. 商品コード…5桁
  2. 商品名…20桁
  3. 単価…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行目のレコード内容は次のとおりです

  1. 00000(商品コード)
  2. SHOUHIN-0000 0100**a(商品名)
  3. 0010001(単価、100.01円)

売り上げデータ(入力ファイル)

 売り上げデータのフィールド構成は次のとおりとします。

  1. 商品コード…5桁
  2. 売上日付…8桁
  3. 売上個数…5桁

 以下は本稿で使用した売上データです。

売り上げデータ(入力ファイル)
000002008060100001
000002008060200010
000012008060100015
000502008060500007
000502008060700020
000502008061100016
100502008060599999

 売上データ1行目のレコード内容は次のとおりです

  1. 00000(商品コード)
  2. 20080601(売上日付、2008年6月1日)
  3. 00001(売上個数、1個)

集計データ(出力ファイル)

 集計データのフィールド構成は次のとおりとします。

  1. 商品コード…5桁
  2. 商品名…20桁
  3. 単価…ZZZZ9.99
  4. 売上個数…ZZZ,ZZ9
  5. 売上金額…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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 布施 榮一(ふせえいいち)

    布施加工有限会社 代表取締役 布施加工って何しているとこなの?? 実はIT屋さんだったりします(笑) Linux基盤各種サービスの設計構築およびコンサルティングをやっています。 ブログもちょこちょこっと書いてます。 Alinous-Core 正規販売代理店

バックナンバー

連載:COBOLプログラミング
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5