• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COBOL)

COBOLでトランザクションファイルとマスターファイルの一致データを出力する方法

このQ&Aのポイント
  • COBOLを使って、トランザクションファイルとマスターファイルを結合し、指定したコードに一致するデータのみを出力する方法を教えてください。
  • トランザクションファイルには店コードと売り上げが、マスターファイルには店コードと店名が入っています。出力ファイルには、一致するコードが指定したコードの場合に、店名と売り上げを出力したいです。
  • プログラムの作成手順としては、トランザクションファイルを読み込みながら、マスターファイルの該当するデータを検索し、一致するデータを出力することになります。具体的な実装方法としては、SERCH文を使用して検索、マッチングの処理を行います。

質問者が選んだベストアンサー

  • ベストアンサー
  • LN-TF
  • ベストアンサー率53% (320/596)
回答No.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)

回答No.1

何かの練習問題ですか?バッチプログラムですよね? 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.

関連するQ&A

専門家に質問してみよう