Control Break Example
IDENTIFICATION DIVISION.
PROGRAM-ID. CONTROL-BREAK-EXAMPLE.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\CUST.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT REPORT-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\CUST.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE
DATA RECORD IS CUSTOMER-RECORD.
01 CUSTOMER-RECORD.
02 CUSTOMER-NAME PIC X(15).
02 CUSTOMER-CITY PIC X(10).
02 CUSTOMER-STATE PIC X(2).
02 CUSTOMER-BALANCE PIC S9(8)V9(2).
FD REPORT-FILE
DATA RECORD IS REPORT-RECORD.
01 REPORT-RECORD PIC X(80).
WORKING-STORAGE SECTION.
01 DETAIL-LINE.
02 DETAIL-NAME PIC X(15).
02 PIC X(5) VALUE SPACES.
02 DETAIL-CITY PIC X(10).
02 PIC X(5) VALUE SPACES.
02 DETAIL-STATE PIC X(2).
02 PIC X(5) VALUE SPACES.
02 DETAIL-BALANCE PIC Z(7)9.99CR.
01 WS-CURRENT-STATE PIC X(2).
01 WS-STATE-BALANCE PIC S9(8)V9(2) VALUE ZERO.
01 END-OF-FILE-SWITCH PIC X VALUE 'N'.
88 END-OF-FILE VALUE 'Y'.
01 SUB-TOTAL-LINE.
02 PIC X(5) VALUE SPACES.
02 PIC X(10) VALUE 'TOTAL FOR '.
02 SUB-TOTAL-STATE PIC X(2).
02 PIC X(23) VALUE ':'.
02 SUB-TOTAL-BALANCE PIC $$,$$$,$$9.99CR.
PROCEDURE DIVISION.
MAINLINE.
PERFORM INITIALIZATION-ROUTINE.
PERFORM THE-LOOP
UNTIL END-OF-FILE.
PERFORM EOJ-ROUTINE.
STOP RUN.
INITIALIZATION-ROUTINE.
OPEN INPUT CUSTOMER-FILE.
OPEN OUTPUT REPORT-FILE.
* Do the initial read and initialize WS-CURRENT-STATE
READ CUSTOMER-FILE
AT END MOVE 'Y' TO END-OF-FILE-SWITCH.
MOVE CUSTOMER-STATE TO WS-CURRENT-STATE.
THE-LOOP.
IF CUSTOMER-STATE NOT = WS-CURRENT-STATE
PERFORM CONTROL-BREAK-ON-STATE.
MOVE CUSTOMER-NAME TO DETAIL-NAME.
MOVE CUSTOMER-CITY TO DETAIL-CITY.
MOVE CUSTOMER-STATE TO DETAIL-STATE.
MOVE CUSTOMER-BALANCE TO DETAIL-BALANCE.
MOVE DETAIL-LINE TO REPORT-RECORD.
WRITE REPORT-RECORD.
* Accumulate a running total for the State
ADD CUSTOMER-BALANCE TO WS-STATE-BALANCE.
* Save the State from this record into WS-CURRENT-STATE
* and then read the next record.
MOVE CUSTOMER-STATE TO WS-CURRENT-STATE.
READ CUSTOMER-FILE
AT END MOVE 'Y' TO END-OF-FILE-SWITCH.
EOJ-ROUTINE.
* Do the final control break for the last State.
PERFORM CONTROL-BREAK-ON-STATE.
CLOSE CUSTOMER-FILE.
CLOSE REPORT-FILE.
CONTROL-BREAK-ON-STATE.
MOVE WS-STATE-BALANCE TO SUB-TOTAL-BALANCE.
MOVE WS-CURRENT-STATE TO SUB-TOTAL-STATE.
MOVE SUB-TOTAL-LINE TO REPORT-RECORD.
WRITE REPORT-RECORD AFTER 2.
MOVE SPACES TO REPORT-RECORD.
WRITE REPORT-RECORD.
* Reset the running total to zero for the next State.
MOVE ZERO TO WS-STATE-BALANCE.
Cobol Home