0
0

More than 1 year has passed since last update.

COBOL 処理パターン テーブル展開

Last updated at Posted at 2021-10-22

機能仕様

顧客マスターファイルをテーブルに展開する。トラザクションレコードの顧客コードから顧客マスターテーブルを検索し、あれば顧客名称をトランザクションレコードに追加する。

入出力構成図

[cob04_01.png]

ソースコード

 IDENTIFICATION              DIVISION.
 PROGRAM-ID.                 TBL001.

 ENVIRONMENT                 DIVISION.
 INPUT-OUTPUT                SECTION.
 FILE-CONTROL.
*入力ファイル 行順編成ファイル(テキストファイル)  
 SELECT  F1  ASSIGN  TO  "./R002.txt"
 ORGANIZATION IS LINE SEQUENTIAL
 ACCESS  MODE  IS  SEQUENTIAL.  
*出力ファイル 行順編成ファイル(テキストファイル)  
 SELECT  F2  ASSIGN  TO  "./R003.txt"
 ORGANIZATION IS LINE SEQUENTIAL
 ACCESS  MODE  IS  SEQUENTIAL.  
*マスターファイル 
 SELECT  M1  ASSIGN  TO  "./M001.txt"
 ORGANIZATION IS LINE SEQUENTIAL
 ACCESS  MODE  IS  SEQUENTIAL.  

 DATA                        DIVISION.
 FILE                        SECTION.
* 入力ファイル
 FD  F1.
 01  F1R.
     05  CUST-CODE           PIC 9(04). 
     05  SALES               PIC 9(10).
* 出力ファイル
 FD  F2.
 01  F2R.
     05  CUST-CODE           PIC 9(04). 
     05  SALES               PIC 9(10).
     05  CUST-NAME           PIC X(20).
* 顧客マスターファイル
 FD  M1.
 01  M1R.
     05 CUST-CODE            PIC 9(04).
     05 CUST-NAME            PIC X(20).       
 WORKING-STORAGE             SECTION.
 01  END-FLG1                PIC 9(01).
 01  END-FLG2                PIC 9(01).
* 顧客マスターテーブル
 01 CUST-TABLE.
     05 CUSTOMER OCCURS 10 TIMES.
         10 CUST-CODE        PIC 9(04).
         10 CUST-NAME        PIC X(20).
* 顧客マスターテーブル件数
 01 CUST-COUNT               PIC 9(02).
* 添え字
 01 I                        PIC 9(02).

 PROCEDURE                   DIVISION.
******************************************************************
* 主処理 
****************************************************************** 
 PERFORM INIT-RTN
 PERFORM LOOP-RTN UNTIL END-FLG2 NOT = 0
 PERFORM END-RTN
 STOP RUN.
******************************************************************
* 前処理 
******************************************************************
 INIT-RTN.
*    変数の初期化
     INITIALIZE END-FLG1 END-FLG2 CUST-COUNT CUST-TABLE
*    ファイルオープン
     OPEN INPUT F1 M1
     OPEN OUTPUT F2
*    顧客マスターの読み込み
     PERFORM UNTIL END-FLG1 > 0
         READ  M1 
             AT END
                 ADD 1 TO END-FLG1
             NOT AT END
                 ADD 1 TO CUST-COUNT 
                 MOVE CUST-CODE OF M1R 
                     TO CUST-CODE OF CUSTOMER(CUST-COUNT) 
                 MOVE CUST-NAME OF M1R 
                     TO CUST-NAME OF CUSTOMER(CUST-COUNT)  
         END-READ
     END-PERFORM
*    1件目のレコードの入力
     PERFORM READ-RTN.
 INIT-RTN-EX. 
     EXIT.
******************************************************************
* 繰り返し処理 
******************************************************************
 LOOP-RTN.
*    出力レコードの編集 
     INITIALIZE F2R
     MOVE CUST-CODE OF F1R TO CUST-CODE OF F2R 
     MOVE SALES OF F1R TO SALES OF F2R 
*    顧客マスターの検索 
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > CUST-COUNT
         IF CUST-CODE OF F1R = CUST-CODE OF CUSTOMER(I)
             MOVE CUST-NAME OF CUSTOMER(I) TO CUST-NAME OF F2R     
             MOVE 99 TO I
         END-IF
     END-PERFORM
*    レコードの出力     
     WRITE F2R
*    次のレコードの読み込み 
     PERFORM READ-RTN.
 LOOP-RTN-EX. 
     EXIT.
******************************************************************
* 後処理 
******************************************************************
 END-RTN.
     CLOSE  F1 F2 M1.
 END-RTN-EX.
     EXIT.
******************************************************************
* 入力処理  
******************************************************************
 READ-RTN.
     READ  F1 
         AT END
             ADD 2 TO END-FLG2
     END-READ.
 READ-RTN-EX.
     EXIT.

入出力ファイルの内容

入力・売り上げ累積ファイル

0001    110000
0002      2500
0003    200000
0005    301000
0006    400000
0007     45500
0008     25000
0009     20000

入力・顧客マスターファイル

0001AAAAA
0002BBBBB
0003CCCCC
0004DDDDD
0005EEEEE
0006桃太郎商事   
0007金太郎産業
0009オフィス浦島 

出力・売り上げ累積ファイル

0001    110000AAAAA
0002      2500BBBBB
0003    200000CCCCC
0005    301000EEEEE
0006    400000桃太郎商事
0007     45500金太郎産業
0008     25000
0009     20000オフィス浦島

関連記事
COBOL 処理パターン 多段階集計
COBOL 処理パターン マッチング
COBOL 処理パターン 外部サブプログラム呼ぶ
COBOL 処理パターン C言語で作成した外部サブプログラムを呼ぶ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0