プログラム例 3 (レコード突き合わせ手法)

この例では、TRWEEK ファイルがセカンダリー入力ファイルとして定義されています。EMPREC および RCWEEK レコードは、 突き合わせレコードとして処理され、 両方のレコードの ENUM フィールドには突き合わせレベル値 M1 に割り当てられています。 異なるレコード・タイプの処理を制御するために、レコード識別標識 01 と 02 が割り当てられています。

図 1. キーによる順次処理、例 3
      *****************************************************************
      *  プログラム名:  YTDRPT5                                       *
      *  関連ファイル:  EMPMST   (物理ファイル)                       *
      *                 TRWEEK   (物理ファイル)                       *
      *                 PRINT    (プリンター・ファイル)               *
      *          説明:  このプログラムはキー順方式を使用              *
      *                 するレコードの処理例です。                    *
      *                 このプログラムは各社員の情報および週間勤務    *
      *                 および超過時間を印刷                          *
      *                 します。                                      *
      *****************************************************************
     FPRINT     O    F   80        PRINTER
     FEMPMST    IP   E           K DISK
     FTRWEEK    IS   E           K DISK
     IEMPREC        01
     I                                          ENUM            M1
     IRCWEEK        02
     I                                          ENUM            M1
     C   01              Z-ADD     0             TOTHRS            5 1
     C   01              Z-ADD     0             TOTOVT            5 1
     C   01              SETOFF                                       12
     C*
     C   MR              IF        (*IN02='1')
     C                   ADD       EHWRK         TOTHRS
     C     EHWRK         SUB       ENHRS         OVTHRS            4 111
     C   11              ADD       OVTHRS        TOTOVT
     C                   SETON                                        12
     C                   ENDIF
     OPRINT     H    1P                     2  6
     O                                           50 'YTD PAYROLL SUMMARY'
     O          D    01                     1
     O                                           12 'EMPLOYEE: '
     O                       ENAME               32
     O          D    01                     1
     O                                           12 'SERIAL #: '
     O                       ENUM                17
     O                                           27 'DEPT: '
     O                       EDEPT               30
     O                                           40 'TYPE: '
     O                       ETYPE               41
     O          D    02 MR                  1
     O                                            8 'WEEK #'
     O                       WEEKNO              10
     O                                           32 'HOURS WORKED = '
     O                       EHWRK         3     38
      *  これらの 2 明細出力行は、*IN01 がオンで、一致するレコードが
      *  見付からない (つまりその社員レコードの RCWEEK レコードが見付からない)
      *  場合に処理されます。この場合には、明らかに
      *  合計フィールド (TOTHRS と TOTOVT) はゼロと等しくなります。
     O          D    01NMR                  1
     O                                           70 'YTD HOURS WORKED = '
     O                       TOTHRS        3     78
     O          D    01NMR                  1
     O                                           70 'YTD OVERTIME HOURS = '
     O                       TOTHRS        3     78

      *  これら 2 行の合計出力行は、明細演算を実行する前に処理されます。
      *  したがって、指定された標識がオンの場合は、最後に
      *  検索されたレコードの社員の合計フィールド (TOTHRS と TOTOVT)
      *  が印刷されます。

     O          T    01 12                  1
     O         OR    LR 12
     O                                           70 'YTD HOURS WORKED = '
     O                       TOTHRS        3     78
     O          T    01 12                  1
     O         OR    LR 12
     O                                           70 'YTD OVERTIME HOURS = '
     O                       TOTOVT        3     78