ILE COBOL Programmer's Guide

Example of Sorting and Merging Files

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   * * * * *


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]