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