Sort Example: With Control Break


       IDENTIFICATION DIVISION.
       PROGRAM-ID.    SORT-4.
       AUTHOR.        BILL ROGERS.

      * As in the previous examples the INPUT PROCEDURE validates
      * the State code and the OUTPUT PROCEDURE formats a report.
      * This version will sort and do a control break on State.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT IN-FILE
               ASSIGN TO 'C:\PCOBWIN\ROGERS\UNSORTED.TXT'
               ORGANIZATION IS LINE SEQUENTIAL.
           SELECT OUT-FILE
               ASSIGN TO 'C:\PCOBWIN\ROGERS\SORTED4.TXT'
               ORGANIZATION IS LINE SEQUENTIAL.
           SELECT SORT-FILE
               ASSIGN TO 'C:\PCOBWIN\ROGERS\WORK.TMP'.

       DATA DIVISION.
       FILE SECTION.
       FD IN-FILE
          DATA RECORD IS IN-RECORD.
       01 IN-RECORD.
          02 IN-ID                  PIC 9(5).
          02 IN-LAST-NAME           PIC X(15).
          02 IN-FIRST-NAME          PIC X(10).
          02 IN-CITY                PIC X(12).
          02 IN-STATE               PIC X(2).
             88 VALID-STATE-CODE                      VALUES 'AK'
                'AL' 'AR' 'AZ' 'CA' 'CO' 'CT' 'DC' 'DE' 'FL' 'GA'
                'HI' 'IA' 'ID' 'IL' 'IN' 'KS' 'KY' 'LA' 'MA' 'MD'
                'ME' 'MI' 'MN' 'MO' 'MS' 'MT' 'NC' 'ND' 'NE' 'NH'
                'NJ' 'NM' 'NV' 'NY' 'OH' 'OK' 'OR' 'PA' 'RI' 'SC'
                'SD' 'TN' 'TX' 'UT' 'VA' 'VT' 'WA' 'WI' 'WV' 'WY'.

       FD OUT-FILE
          DATA RECORD IS OUT-RECORD.
       01 OUT-RECORD                PIC X(80).

       SD SORT-FILE
          DATA RECORD IS SORT-RECORD.
       01 SORT-RECORD.
          02 SORT-ID                PIC 9(5).
          02 SORT-LAST-NAME         PIC X(15).
          02 SORT-FIRST-NAME        PIC X(10).
          02 SORT-CITY              PIC X(12).
          02 SORT-STATE             PIC X(2).

       WORKING-STORAGE SECTION.

       01 DETAIL-LINE.
          02 DETAIL-ID              PIC 9(5).
          02                        PIC X(3)          VALUE SPACES.
          02 DETAIL-LAST-NAME       PIC X(15).
          02                        PIC X(3)          VALUE SPACES.
          02 DETAIL-FIRST-NAME      PIC X(10).
          02                        PIC X(3)          VALUE SPACES.
          02 DETAIL-CITY            PIC X(12).
          02                        PIC X(3)          VALUE SPACES.
          02 DETAIL-STATE           PIC X(2).

       01 SORTED-DATA-SWITCH        PIC X             VALUE 'N'.
          88 NO-MORE-SORTED-DATA                      VALUE 'Y'.

       01 EOF-SWITCH                PIC X             VALUE 'N'.
          88 NO-MORE-INPUT-RECORDS                    VALUE 'Y'.

       01 STATE-COUNT               PIC 9(3)          VALUE ZERO.

       01 BREAK-LINE.
          02                        PIC X(8)          VALUE SPACES.
          02 PRINT-COUNT            PIC ZZ9.
          02                        PIC X(12)
                                        VALUE ' RECORDS IN '.
          02 CURRENT-STATE          PIC X(2).

       PROCEDURE DIVISION.
       MAIN-LOGIC.
           SORT SORT-FILE
                ON ASCENDING KEY SORT-STATE
                ON ASCENDING KEY SORT-LAST-NAME
                INPUT PROCEDURE IS INPUT-LOGIC
                OUTPUT PROCEDURE IS CREATE-REPORT.
           STOP RUN.

       INPUT-LOGIC.
           OPEN INPUT IN-FILE.
           READ IN-FILE
              AT END MOVE 'Y' TO EOF-SWITCH.
           PERFORM DATA-LOOP
              UNTIL NO-MORE-INPUT-RECORDS.
           CLOSE IN-FILE.

       DATA-LOOP.
           IF VALID-STATE-CODE
              MOVE IN-RECORD TO SORT-RECORD
              RELEASE SORT-RECORD.
           READ IN-FILE
              AT END MOVE 'Y' TO EOF-SWITCH.

       CREATE-REPORT.
           OPEN OUTPUT OUT-FILE.
           RETURN SORT-FILE
              AT END MOVE 'Y' TO SORTED-DATA-SWITCH.
           MOVE SORT-STATE TO CURRENT-STATE.
           PERFORM REPORT-LOOP
              UNTIL NO-MORE-SORTED-DATA.
           PERFORM DO-CONTROL-BREAK.
           CLOSE OUT-FILE.

       REPORT-LOOP.
           IF SORT-STATE NOT = CURRENT-STATE
              PERFORM DO-CONTROL-BREAK.
           MOVE SORT-ID TO DETAIL-ID
           MOVE SORT-LAST-NAME TO DETAIL-LAST-NAME.
           MOVE SORT-FIRST-NAME TO DETAIL-FIRST-NAME.
           MOVE SORT-CITY TO DETAIL-CITY.
           MOVE SORT-STATE TO DETAIL-STATE.
           WRITE OUT-RECORD FROM DETAIL-LINE.
           ADD 1 TO STATE-COUNT.
           MOVE SORT-STATE TO CURRENT-STATE.
           RETURN SORT-FILE
              AT END MOVE 'Y' TO SORTED-DATA-SWITCH.

       DO-CONTROL-BREAK.
           MOVE STATE-COUNT TO PRINT-COUNT.
           WRITE OUT-RECORD FROM BREAK-LINE AFTER 2.
           MOVE ZERO TO STATE-COUNT
           MOVE SPACES TO OUT-RECORD.
           WRITE OUT-RECORD.

Input

91163Dube           Jason     Chicago     IL
61535King           Adriane   Cincinnati  OH
45636Holtz          Rachel    Newport     KY
10216Gehl           Bryan     Louisville  KY
52158Flynn          Ashley    Muskegon    MI
22277Theis          Hanah     Norwood     OH
38551Solpa          Mac       Lansing     MI
78496McCoy          Amanda    Brookfield  WI
65720Read           Sean      Springfield BF
94000Waymel         Bradley   Kalamazoo   MI
42966Vilella        Reza      Urbana      IL
04928Streeter       Farhad    Toledo      OH
69216Steele         Karen     Covington   KY
56913Moreno         Jan       Dayton      OH
34932Vogel          Sandra    Grand RapidsMI

Output (report with control break)

91163   Dube              Jason        Chicago        IL
42966   Vilella           Reza         Urbana         IL

          2 RECORDS IN IL

10216   Gehl              Bryan        Louisville     KY
45636   Holtz             Rachel       Newport        KY
69216   Steele            Karen        Covington      KY

          3 RECORDS IN KY

52158   Flynn             Ashley       Muskegon       MI
38551   Solpa             Mac          Lansing        MI
34932   Vogel             Sandra       Grand Rapids   MI
94000   Waymel            Bradley      Kalamazoo      MI

          4 RECORDS IN MI

61535   King              Adriane      Cincinnati     OH
56913   Moreno            Jan          Dayton         OH
04928   Streeter          Farhad       Toledo         OH
22277   Theis             Hanah        Norwood        OH

          4 RECORDS IN OH

78496   McCoy             Amanda       Brookfield     WI

          1 RECORDS IN WI


Cobol Home