相対ファイルの作成

このプログラムでは、順次アクセスを使用して販売実績レコードの相対ファイルを作成します。 各レコードには、ある年の週ごとの販売数量と販売高の実績が、5 年間分含まれています。 ファイルには 52 個のレコードが入っており、各レコードはそれぞれ 1 週間を表しています。

各入力レコードは、ある年の週ごとの販売実績を表しています。 最近 5 年間 (昇順) の各年の最初の週のレコードが、最初の 5 つの入力レコードとなり、最近 5 年間の第 2 週のレコードが、 次の 5 つの入力レコードとなり、.... というようになります。 このように、5 つの入力レコードによって 1 つの出力レコードが作り出されます。

RELATIVE-FILERELATIVE KEY は指定されていません。 START ステートメントが使用されていない限り、順次アクセスでは必要ないからです。 (しかし更新において、キーは INPUT-WEEK です。)

図 124. 相対ファイル・プログラムの例
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/UPDTSEQ         ISERIES1   06/02/15 14:48:09        ページ    2
                                     ソ ー ス
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID.   CRTREL.
           000300
     3     000400 ENVIRONMENT DIVISION.
     4     000500 CONFIGURATION SECTION.
     5     000600   SOURCE-COMPUTER. IBM-ISERIES
     6     000700   OBJECT-COMPUTER. IBM-ISERIES.
     7     000800 INPUT-OUTPUT SECTION.
     8     000900 FILE-CONTROL.
     9     001000     SELECT RELATIVE-FILE ASSIGN TO DISK-FILED
    11     001100         ORGANIZATION IS RELATIVE
    12     001200          ACCESS IS SEQUENTIAL
    13     001300         FILE STATUS RELATIVE-FILE-STATUS.
    14     001400     SELECT INPUT-FILE ASSIGN TO DISK-FILEC
    16     001500         ORGANIZATION IS SEQUENTIAL
    17     001600         ACCESS IS SEQUENTIAL
    18     001700         FILE STATUS INPUT-FILE-STATUS.
           001800
    19     001900 DATA DIVISION.
    20     002000 FILE SECTION.
    21     002100 FD  RELATIVE-FILE.
    22     002200 01  RELATIVE-RECORD-01.
    23     002300     05  RELATIVE-RECORD OCCURS 5 TIMES INDEXED BY REL-INDEX.
    24     002400         10  RELATIVE-YEAR          PICTURE 99.
    25     002500         10  RELATIVE-WEEK          PICTURE 99.
    26     002600         10  RELATIVE-UNIT-SALES    PICTURE S9(6).
    27     002700         10  RELATIVE-DOLLAR-SALES  PICTURE S9(9)V99.
    28     002800 FD  INPUT-FILE.
    29     002900 01  INPUT-RECORD.
    30     003000     05  INPUT-YEAR                 PICTURE 99.
    31     003100     05  INPUT-WEEK                 PICTURE 99.
    32     003200     05  INPUT-UNIT-SALES           PICTURE S9(6).
    33     003300     05  INPUT-DOLLAR-SALES         PICTURE S9(9)V99.
           003400
    34     003500 WORKING-STORAGE SECTION.
    35     003600 77  RELATIVE-FILE-STATUS           PICTURE XX.
    36     003700 77  INPUT-FILE-STATUS              PICTURE XX.
    37     003800 77  OP-NAME                        PICTURE X(5).
    38     003900 01  WORK-RECORD.
    39     004000     05  WORK-YEAR                  PICTURE 99 VALUE 00.
    40     004100     05  WORK-WEEK                  PICTURE 99.
    41     004200     05  WORK-UNIT-SALES            PICTURE S9(6).
    42     004300     05  WORK-DOLLAR-SALES          PICTURE S9(9)V99.
    43     004400 01  INPUT-END                      PICTURE X VALUE SPACE.
    44     004500     88  THE-END-OF-INPUT           VALUE "E".
           004600
    45     004700 PROCEDURE DIVISION.
    46     004800 DECLARATIVES.
           004900 INPUT-ERROR SECTION.
           005000       USE AFTER STANDARD ERROR PROCEDURE ON INPUT-FILE.
           005100 INPUT-ERROR-PARA.
    47     005200     DISPLAY "UNEXPECTED ERROR ON ", OP-NAME, " FOR INPUT-FILE ".
    48     005300     DISPLAY "FILE STATUS IS ", INPUT-FILE-STATUS.
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/CRTREL          ISERIES1  06/02/15 14:49:23        ページ    3
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
    49     005400     DISPLAY "PROCESSING ENDED"
    50     005500     STOP RUN.
           005600
           005700 OUTPUT-ERROR SECTION.
           005800       USE AFTER STANDARD ERROR PROCEDURE ON RELATIVE-FILE.
           005900 OUTPUT-ERROR-PARA.
    51     006000     DISPLAY "UNEXPECTED ERROR ON ", OP-NAME, " FOR RELATIVE-FILE".
    52     006100     DISPLAY "FILE STATUS IS ", RELATIVE-FILE-STATUS.
    53     006200     DISPLAY "PROCESSING ENDED"
    54     006300     STOP RUN.
           006400 END DECLARATIVES.
           006500
           006600 MAIN-PROGRAM SECTION.
           006700 MAINLINE.
    55     006800     MOVE "OPEN" TO OP-NAME.
    56     006900     OPEN INPUT INPUT-FILE
           007000          OUTPUT RELATIVE-FILE.
           007100
    57     007200     SET REL-INDEX TO 1.
    58     007300     MOVE "READ" TO OP-NAME.
    59     007400     READ INPUT-FILE
    60     007500         AT END SET THE-END-OF-INPUT TO TRUE
           007600     END-READ.
           007700
    61     007800     PERFORM UNTIL THE-END-OF-INPUT
    62     007900         MOVE INPUT-RECORD TO RELATIVE-RECORD (REL-INDEX)
    63     008000         IF REL-INDEX NOT = 5
    64     008100             SET REL-INDEX UP BY 1
           008200         ELSE
    65     008300             SET REL-INDEX TO 1
    66     008400             MOVE "WRITE" TO OP-NAME
    67     008500             WRITE RELATIVE-RECORD-01
           008600         END-IF
           008700
    68     008800         MOVE "READ" TO OP-NAME
    69     008900         READ INPUT-FILE
    70     009000             AT END SET THE-END-OF-INPUT TO TRUE
           009100        END-READ
           009200     END-PERFORM.
           009300
    71     009400     CLOSE RELATIVE-FILE
           009500           INPUT-FILE.
    72     009600     STOP RUN.
           009700
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *