サンプルプログラムの作成 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を実行した時刻と同じ時刻に作成されているはずです。続いて、内容を確認してみてください。
[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@]$
[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」とこのマッチング処理をマスターすれば、現在業務で使用されているプログラムの大半はカバーできてしまいます。後は、データ構造によりネストが深い処理等の応用、可変長レコードを入出力に使用した場合等になりますが、これは別の機会に紹介したいと思います。
参考
- COBOL言語をLinux環境で動かす:CodeZine(OpenCOBOL環境のインストール方法)
- COBOLプログラミング 基本編 :CodeZine(基本的なCOBOL言語の解説)
