機能仕様
顧客マスターファイルをテーブルに展開する。トラザクションレコードの顧客コードから顧客マスターテーブルを検索し、あれば顧客名称をトランザクションレコードに追加する。
入出力構成図
ソースコード
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言語で作成した外部サブプログラムを呼ぶ