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.
5722WDS V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SORTMERG ISERIES1 06/02/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 V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SORTMERG ISERIES1 06/02/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 V5R4M0 060210 LN IBM ILE COBOL CBLGUIDE/SORTMERG ISERIES1 06/02/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, 2006. All Rights Reserved.