機能仕様
顧客マスターファイルをテーブルに展開する。トラザクションレコードの顧客コードから顧客マスターテーブルを検索し、あれば顧客名称をトランザクションレコードに追加する。
入出力構成図
![[cob04_01.png]](https://qiita-user-contents.imgix.net/http%3A%2F%2Fmikomokaru.sakura.ne.jp%2Fcobol%2F4%2Fcob04_01.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c516d505f659c5687948acb071ed9054)
ソースコード
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言語で作成した外部サブプログラムを呼ぶ