ファイルのソートおよびマージの例

図 104 は、現在の売上と年間の売上のソート・ファイルを作成する方法を示すものです。

まず、現在の売上に関する SORT ステートメントが実行されます。 このソート操作に関する入力プロシージャーは SCREEN-DEPT です。 レコードは、部門については昇順でソートされ、各部門の純売上 (SALES) については降順でソートされます。 次に、このソートに関する出力が印刷されます。

ソート操作が完了すると、現在の売上 (CURRENT-SALES) のレコードと年間の売上 (YTD-SALES) のレコードがマージされます。 このファイルのレコードは、部門番号については昇順、各部門の従業員番号については昇順、 月 (MONTH) については昇順にマージされ、更新された年間基本マスター・ファイルを作成します。

マージ処理が終了すると、更新された年間マスター・ファイルを印刷します。

図 104. SORT / MERGE の使用例
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/SORTMERG        ISERIES1   06/02/15 13:56:03        ページ    2
                                     ソ ー ス
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     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        ページ    3
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
    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*    現在の売上をソート
           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*    年次報告書を更新
           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        ページ    4
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
           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*    年次報告書を印刷
           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
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *