Figure 104 illustrates the creation of sorted files of current sales and year-to-date sales.
First, the SORT statement for current sales is executed. The input procedure for this sorting operation is SCREEN-DEPT. The records are sorted in ascending order of department, and within each department, in descending order of net sales. The output for this sort is then printed.
After the sorting operation is completed, the current sales records are merged with the year-to-date sales records. The records in this file are merged in ascending order of department number and, within each department, in ascending order of employee numbers, and, for each employee, in ascending order of months to create an updated year-to-date master file.
When the merging process finishes, the updated year-to-date master file is printed.
Figure 104. Example of Use of SORT/MERGE
5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SORTMERG ISERIES1 03/09/15 13:56:03 Page 2 S o u r c e STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 1 000100 IDENTIFICATION DIVISION. 2 000200 PROGRAM-ID. SORTMERGE. 000300********************************************************* 000400* THIS IS A SORT/MERGE EXAMPLE USING AN INPUT PROCEDURE * 000500********************************************************* 3 000600 ENVIRONMENT DIVISION. 4 000700 CONFIGURATION SECTION. 5 000800 SOURCE-COMPUTER. IBM-ISERIES 6 000900 OBJECT-COMPUTER. IBM-ISERIES 7 001000 INPUT-OUTPUT SECTION. 8 001100 FILE-CONTROL. 9 001200 SELECT WORK-FILE 10 001300 ASSIGN TO DISK-WRK. 11 001400 SELECT CURRENT-SALES-FILE-IN 12 001500 ASSIGN TO DISK-CURRIN. 13 001600 SELECT CURRENT-SALES-FILE-OUT 14 001700 ASSIGN TO DISK-CURROUT. 15 001800 SELECT YTD-SALES-FILE-IN 16 001900 ASSIGN TO DISK-YTDIN. 17 002000 SELECT YTD-SALES-FILE-OUT 18 002100 ASSIGN TO DISK-YTDOUT. 19 002200 SELECT PRINTER-OUT 20 002300 ASSIGN TO PRINTER-PRTSUMM. 002400 21 002500 DATA DIVISION. 22 002600 FILE SECTION. 23 002700 SD WORK-FILE. 24 002800 01 SALES-RECORD. 25 002900 05 EMPL-NO PIC 9(6). 26 003000 05 DEPT PIC 9(2). 27 003100 05 SALES PIC 9(7)V99. 28 003200 05 NAME-ADDR PIC X(61). 29 003300 05 MONTH PIC X(2). 30 003400 FD CURRENT-SALES-FILE-IN. 31 003500 01 CURRENT-SALES-IN. 32 003600 05 EMPL-NO PIC 9(6). 33 003700 05 DEPT PIC 9(2). 34 003800 88 ON-SITE-EMPLOYEE VALUES 0 THRU 6, 8. 35 003900 05 SALES PIC 9(7)V99. 36 004000 05 NAME-ADDR PIC X(61). 37 004100 05 MONTH PIC X(2). 38 004200 FD CURRENT-SALES-FILE-OUT. 39 004300 01 CURRENT-SALES-OUT. 40 004400 05 EMPL-NO PIC 9(6). 41 004500 05 DEPT PIC 9(2). 42 004600 05 SALES PIC 9(7)V99. 43 004700 05 NAME-ADDR PIC X(61). 44 004800 05 MONTH PIC X(2). 45 004900 FD YTD-SALES-FILE-IN. 46 005000 01 YTD-SALES-IN. 47 005100 05 EMPL-NO PIC 9(6). 48 005200 05 DEPT PIC 9(2). 49 005300 05 SALES PIC 9(7)V99. 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SORTMERG ISERIES1 03/09/15 13:56:03 Page 3 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 50 005400 05 NAME-ADDR PIC X(61). 51 005500 05 MONTH PIC X(2). 52 005600 FD YTD-SALES-FILE-OUT. 53 005700 01 YTD-SALES-OUT. 54 005800 05 EMPL-NO PIC 9(6). 55 005900 05 DEPT PIC 9(2). 56 006000 05 SALES PIC 9(7)V99. 57 006100 05 NAME-ADDR PIC X(61). 58 006200 05 MONTH PIC X(2). 59 006300 FD PRINTER-OUT. 60 006400 01 PRINT-LINE. 61 006500 05 RECORD-LABEL PIC X(25). 62 006600 05 DISK-RECORD-DISPLAY PIC X(80). 006700 63 006800 WORKING-STORAGE SECTION. 64 006900 01 SALES-FILE-IN-EOF-STATUS PIC X VALUE "F". 65 007000 88 SALES-FILE-IN-END-OF-FILE VALUE "T". 66 007100 01 SALES-FILE-OUT-EOF-STATUS PIC X VALUE "F". 67 007200 88 SALES-FILE-OUT-END-OF-FILE VALUE "T". 68 007300 01 YTD-SALES-OUT-EOF-STATUS PIC X VALUE "F". 69 007400 88 YTD-SALES-OUT-END-OF-FILE VALUE "T". 007500 70 007600 PROCEDURE DIVISION. 007700 MAIN-PROGRAM SECTION. 007800 MAINLINE. 007900 71 008000 OPEN INPUT CURRENT-SALES-FILE-IN 008100 CURRENT-SALES-FILE-OUT 008200 YTD-SALES-FILE-OUT 008300 OUTPUT PRINTER-OUT. 008400* 008500* Sort current sales 008600* 72 008700 SORT WORK-FILE 008800 ON ASCENDING KEY DEPT OF SALES-RECORD 008900 ON DESCENDING KEY SALES OF SALES-RECORD 009000 INPUT PROCEDURE SCREEN-DEPT 009100 GIVING CURRENT-SALES-FILE-OUT. 73 009200 READ CURRENT-SALES-FILE-OUT 74 009300 AT END SET SALES-FILE-OUT-END-OF-FILE TO TRUE 009400 END-READ. 75 009500 PERFORM UNTIL SALES-FILE-OUT-END-OF-FILE 76 009600 MOVE "SORTED CURRENT SALES " 009700 TO RECORD-LABEL OF PRINT-LINE 77 009800 MOVE CURRENT-SALES-OUT TO DISK-RECORD-DISPLAY 78 009900 WRITE PRINT-LINE 79 010000 READ CURRENT-SALES-FILE-OUT 80 010100 AT END SET SALES-FILE-OUT-END-OF-FILE TO TRUE 010200 END-READ 010300 END-PERFORM. 010400* 010500* Update yearly report 010600* 81 010700 MERGE WORK-FILE 010800 ON ASCENDING KEY DEPT OF SALES-RECORD 5722WDS V5R3M0 030905 LN IBM ILE COBOL CBLGUIDE/SORTMERG ISERIES1 03/09/15 13:56:03 Page 4 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S COPYNAME CHG DATE 010900 ON ASCENDING KEY EMPL-NO OF SALES-RECORD 011000 ON ASCENDING KEY MONTH OF SALES-RECORD 011100 USING YTD-SALES-FILE-IN 011200 CURRENT-SALES-FILE-IN 011300 GIVING YTD-SALES-FILE-OUT. 011400* 011500* Print yearly report 011600* 82 011700 READ YTD-SALES-FILE-OUT 83 011800 AT END SET YTD-SALES-OUT-END-OF-FILE TO TRUE 011900 END-READ. 84 012000 PERFORM UNTIL YTD-SALES-OUT-END-OF-FILE 85 012100 MOVE "MERGED YTD SALES ", 012200 TO RECORD-LABEL OF PRINT-LINE 86 012300 MOVE YTD-SALES-OUT TO DISK-RECORD-DISPLAY 87 012400 WRITE PRINT-LINE 88 012500 READ YTD-SALES-FILE-OUT 89 012600 AT END SET YTD-SALES-OUT-END-OF-FILE TO TRUE 012700 END-READ 012800 END-PERFORM. 012900 90 013000 CLOSE CURRENT-SALES-FILE-IN 013100 CURRENT-SALES-FILE-OUT 013200 YTD-SALES-FILE-OUT 013300 PRINTER-OUT. 91 013400 STOP RUN. 013500 013600 SCREEN-DEPT SECTION. 013700 SCREEN-DEPT-PROCEDURE. 013800 92 013900 READ CURRENT-SALES-FILE-IN 93 014000 AT END SET SALES-FILE-IN-END-OF-FILE TO TRUE 014100 END-READ. 94 014200 PERFORM UNTIL SALES-FILE-IN-END-OF-FILE 95 014300 MOVE "UNSORTED CURRENT SALES ", 014400 TO RECORD-LABEL OF PRINT-LINE 96 014500 MOVE CURRENT-SALES-IN TO DISK-RECORD-DISPLAY 97 014600 WRITE PRINT-LINE 98 014700 IF ON-SITE-EMPLOYEE 99 014800 MOVE CURRENT-SALES-IN TO SALES-RECORD 100 014900 RELEASE SALES-RECORD 015000 END-IF 101 015100 READ CURRENT-SALES-FILE-IN 102 015200 AT END SET SALES-FILE-IN-END-OF-FILE TO TRUE 015300 END-READ 015400 END-PERFORM. 015500 * * * * * E N D O F S O U R C E * * * * * |
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.