- ベストアンサー
COBOLでトランザクションファイルとマスターファイルの一致データを出力する方法
- COBOLを使って、トランザクションファイルとマスターファイルを結合し、指定したコードに一致するデータのみを出力する方法を教えてください。
- トランザクションファイルには店コードと売り上げが、マスターファイルには店コードと店名が入っています。出力ファイルには、一致するコードが指定したコードの場合に、店名と売り上げを出力したいです。
- プログラムの作成手順としては、トランザクションファイルを読み込みながら、マスターファイルの該当するデータを検索し、一致するデータを出力することになります。具体的な実装方法としては、SERCH文を使用して検索、マッチングの処理を行います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
既に回答があがっておりますが?と思われる処もあるので、それをベースにベタなプログラムですが・・・。ファイルデザインは"テキトウ”です。ファイルの記述もコンパイラによって違います。簡単に書いてあるのでテキトウに補って下さい。 * * マスタファイル FD M-F. 01 M-R. 02 M-RR OCCURS 10. 03 TEN-C-M PIC X(02). 03 TEN-N-M PIC N(05). * PIC N(5) は日本語5文字(10バイト) * コンパイラによって表記法が違うと思います。 * トランザクションファイル FD TR-F. 01 TR-R. 02 TEN-C-TR PIC X(02). 02 GAKU-TR PIC S9(8). * 店舗コード指定域 01 TEN-C-AC PIC X(02) VALUE '01'. * 出力域 01 TR-WR VALUE SPACE. 02 PIC X(03). 02 TEN-N-WR PIC N(5). 02 PIC X(02). 02 GAKU-WR PIC ---,---,--9.99. * 01 LCTR PIC 99 VALUE 99. * S01. READ M-F AT END GO TO S02. S02. READ TR-F AT END GO TO S0-END. IF TEN-C-TR NOT = TEN-C-AC GO TO S02. * SET IDX 1. SERCH M-R AT END MOVE ALL '?' TO TEN-N-WR WHEN TEN-C-TR = TEN-C-M (X) MOVE TEN-N-M (X) TO TEN-N-WR. * MOVE GAKU-TR TO GAKU-WR. IF LCTR > 66 PERFORM HDR-PRO THRU HDR-PRO-END. * 改ページ、ヘッダー処理(省略) WRITE LP-REC FROM TR-WR AFTER 1. ADD 1 TO LCTR. GO TO S02. S0-END. ENDCOBOL. 御覧のやうに可也ピリオドが抜けていました。又、マスタを読んだだけで終了処理になってしまいました。なお「END」は予約語の筈でそれだけでコンパイルエラーになる筈です。 サーチ命令は折角ですから入れたのですが、コンパイラによっては二分探索を行なうものがあります。この場合キーが昇順に格納されていないと実行結果がおかしくなります。 久々なのでミスがあるかもしれません。
その他の回答 (1)
- kernel_kazzz
- ベストアンサー率29% (895/2993)
何かの練習問題ですか?バッチプログラムですよね? SERCH文を使うのは絶対条件ですか? 実務的にはTABLEやSERCHなんか使わずに、TRデータ及びマスターファイルをJOB上でそれぞれ店コードでSORTしておいて、COBOLプログラムに投入しますね。 その方が処理が早い。 ただ、私の知識はCOBOL85で停まっているものでね… 命令文の記憶もあやふやなんですよ。 他の方の回答が付けば、その方が新しいだろうと思って静観していたのですが、なかなか回答が付かないみたいなので。 それらを踏まえて見てください。 S01 READ "マスター" AT END GO TO END. GO TO S03. S02 READ "TRデータ" AT END GO TO END. IF 店コード OF "TRデータ" NOT = "01" GO TO S02. S03 IF 店コード OF "マスター" < 店コード OF "TRデータ" GO TO S01. IF 店コード OF "マスター" > 店コード OF "TRデータ" GO TO S02. MOVE 店名 OF "マスター" TO 店名 OF "出力". MOVE 売上 OF "マスター" TO 売上 OF "出力". WRITE "出力". GO TO S02 END END COBOL.