CodeZine(コードジン)

特集ページ一覧

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

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

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

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

目次

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

実行

 実行に先立ち入力ファイルを用意します。今回はサンプル用の入力データと実行後の出力データを用意しました。サンプルには、マスタデータが"match.in1"、売上データが"match.in2"として格納されています。コンパイル物作成ディレクトリに適当なファイル名で格納してください。

 マスタデータを"match.in1"、売上データを"match.in2"、集計データを"match.dat"、エラーデータを"error.dat"としたときの実行方法は次のとおりです。

実行方法例
./test-cob02 match.in1 match.in2 match.dat error.dat

 実行に先立ち、lsコマンドでカレントディレクトリの内容を確認しておきます。

カレントディレクトリ確認例
[e-fuse@]$ ls -l
-rw-rw-r-- 1 cobol cobol   396  6月 24 02:33 match.in1
-rw-rw-r-- 1 cobol cobol   133  6月 24 02:21 match.in2
-rwxrwxr-x 1 cobol cobol 18461  6月 25 09:35 test-cob02
-rw-rw-r-- 1 cobol cobol  3668  6月 25 09:36 test-cob02.cob
[cobol@localserver01 ~]$

 入力の2つのファイルとソースおよび実行ファイルがあり、出力ファイルがないことを確認してください。

 確認したら、早速実行しましょう。

実行例
[e-fuse@]$ ./test-cob02 match.in1 match.in2 match.dat error.dat
[e-fuse@]$

 もし、"error while loading shared..."と、エラーが出た場合は、適宜環境を整えて再度実行してください(COBOL言語をLinux環境で動かす(4ページ)

実行内容の確認

 まずは、カレントディレクトリに作成されているファイルを確認してください。

カレントディレクトリ確認例
[e-fuse@]$ ls -l
-rw-rw-r-- 1 cobol cobol    38  6月 25 10:03 error.dat
-rw-rw-r-- 1 cobol cobol   396  6月 24 02:33 match.in1
-rw-rw-r-- 1 cobol cobol   133  6月 24 02:21 match.in2
-rw-rw-r-- 1 cobol cobol   648  6月 25 10:03 match.dat
-rwxrwxr-x 1 cobol cobol 18461  6月 25 09:35 test-cob02
-rw-rw-r-- 1 cobol cobol  3668  6月 25 09:36 test-cob02.cob
[cobol@localserver01 ~]$

 error.datとmatch.datがtest-cob02を実行した時刻と同じ時刻に作成されているはずです。続いて、内容を確認してみてください。

match.datの確認
[e-fuse@]$ cat match.dat
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
[e-fuse@]$ 
error.datの確認
[e-fuse@]$ cat error.dat
000012008060100015
100502008060599999
[e-fuse@]$

 いずれも、当初に説明した想定出力と相違がないことが確認できました。

 サンプルに想定出力を同梱しています。想定出力と出力内容が同一であるかは、diffコマンドを使用して確認できます。同梱ファイル"match.out"、"error.out"をカレントディレクトリに展開し、実行後に作成された"match.dat"、"error.dat"との差分を確認する方法は次のとおりです。

出力ファイルと想定ファイルの差分表示コマンド実行例
[e-fuse@]$ diff match.dat match.out
[e-fuse@]$ diff error.dat error.out
[e-fuse@]$

 差分がない場合は、特に表示されることはありません。なお、差分がある場合の出力は以下となります。

差分がある場合の出力例
[e-fuse@]$diff error.dat error.out
1c1
< 000012008060100014
---
> 000012008060100015
[e-fuse@]$

まとめ

 今回はCOBOLで定番のマッチング処理について、サンプルプログラムをコーディングしOpenCOBOLの機能を確認しました。前回解説した「DISKtoDISK」とこのマッチング処理をマスターすれば、現在業務で使用されているプログラムの大半はカバーできてしまいます。後は、データ構造によりネストが深い処理等の応用、可変長レコードを入出力に使用した場合等になりますが、これは別の機会に紹介したいと思います。

参考



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

バックナンバー

連載:COBOLプログラミング

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5