コントロールブレイク(キー項目が変わる度に何らかの処理を実行)のロジックについて、以前の記事で紹介しました。
https://akira2kun.hatenablog.com/entry/2018/10/06/150330
COBOLでサンプルプログラムを作成しましたので、参考までに紹介します。
【サンプルプログラム】
IDENTIFICATION DIVISION.
PROGRAM-ID. CONTBREK.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F1 ASSIGN TO "C:\tmp\a.txt".
SELECT F2 ASSIGN TO "C:\tmp\b.txt".
*
DATA DIVISION.
FILE SECTION.
FD F1.
01 F1R.
03 F1-REC PIC X(33).
FD F2.
01 F2R.
03 F2-REC PIC X(33).
*
WORKING-STORAGE SECTION.
01 WORK.
03 F1-END PIC X(01).
03 F1-OLD-KEY PIC X(07).
01 F1-REC-WORK.
03 F1-SYOHIN-CODE
PIC X(07).
03 F1-COMMA1 PIC X(01).
03 F1-HANBAI-YMD PIC X(08).
03 F1-COMMA2 PIC X(01).
03 F1-HANBAI-KOSUU
PIC X(05).
03 F1-COMMA3 PIC X(01).
03 F1-HANBAI-KINGAKU
PIC X(09).
03 F1-CRLF PIC X(02).
01 F2-TITLE-WORK.
03 F2-ASTER1 PIC X(02) VALUE '**'.
03 F2-SYOHIN-CODE-TITLE
PIC X(07).
03 F2-ASTER2 PIC X(22)
VALUE '**********************'.
03 F2-CRLF-TITLE PIC X(02) VALUE X'0D0A'.
01 F2-REC-WORK.
03 F2-SYOHIN-CODE
PIC X(07).
03 F2-COMMA1 PIC X(01).
03 F2-HANBAI-YMD PIC X(08).
03 F2-COMMA2 PIC X(01).
03 F2-HANBAI-KOSUU
PIC X(05).
03 F2-COMMA3 PIC X(01).
03 F2-HANBAI-KINGAKU
PIC X(09).
03 F2-CRLF PIC X(02).
*
PROCEDURE DIVISION.
*
* 各種処理の呼び出し
*
000-CONTROLLER-S.
PERFORM 100-START-S THRU 100-START-E.
PERFORM 200-MAIN-S THRU 200-MAIN-E
UNTIL F1-END = HIGH-VALUE.
PERFORM 300-END-S THRU 300-END-E.
STOP RUN.
000-CONTROLLER-E.
*
* 前処理
*
100-START-S.
INITIALIZE WORK.
OPEN INPUT F1.
OPEN OUTPUT F2.
PERFORM 210-READ-S THRU 210-READ-E.
100-START-E.
*
* 主処理
*
200-MAIN-S.
IF F1-SYOHIN-CODE NOT = F1-OLD-KEY
PERFORM 220-WRITE-TITLE-S THRU 220-WRITE-TITLE-E
MOVE F1-SYOHIN-CODE TO F1-OLD-KEY
END-IF.
PERFORM 230-WRITE-RECORD-S THRU 230-WRITE-RECORD-E.
PERFORM 210-READ-S THRU 210-READ-E.
200-MAIN-E.
*
* READ処理
*
210-READ-S.
READ F1
AT END
MOVE HIGH-VALUE TO F1-END
GO TO 210-READ-E
END-READ.
MOVE F1-REC TO F1-REC-WORK.
210-READ-E.
*
* WRITE処理(タイトル)
*
220-WRITE-TITLE-S.
MOVE F1-SYOHIN-CODE TO F2-SYOHIN-CODE-TITLE.
MOVE F2-TITLE-WORK TO F2-REC.
WRITE F2R.
220-WRITE-TITLE-E.
*
* WRITE処理(レコード)
*
230-WRITE-RECORD-S.
MOVE F1-REC-WORK TO F2-REC-WORK.
MOVE F2-REC-WORK TO F2-REC.
WRITE F2R.
230-WRITE-RECORD-E.
*
* 後処理
*
300-END-S.
CLOSE F1.
CLOSE F2.
300-END-E.
【入力ファイル】
・C:\tmp\a.txt
0000001,20180401,00100,00010000
0000001,20180402,00200,00020000
0000002,20180401,00001,00001000
0000003,20180402,00002,00002000
【出力ファイル】
・C:\tmp\b.txt
**0000001**********************
0000001,20180401,00100,00010000
0000001,20180402,00200,00020000
**0000002**********************
0000002,20180401,00001,00001000
**0000003**********************
0000003,20180402,00002,00002000