プログラム例 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