このドキュメントでは、インデックス表記 (n:n) を使用して、出力するマルチプルバリューフィールドの値の個数、または出力するピリオディックグループのオカレンス数を指定する方法について説明します。
以下のトピックについて説明します。
インデックス表記 (n:n) を使用すると、出力するマルチプルバリューフィールドの値の個数またはピリオディックグループのオカレンス数を指定できます。
例えば、DDMEMPLOYEES のフィールド INCOME は、ある従業員が会社に雇用されてからの年ごとの年間収入記録を保持するピリオディックグループです。
これらの年間収入は年順に保持されています。最新の年収は、オカレンス 1 に含まれています。
従業員の最近 3 年間の年間収入、つまりオカレンス 1~3 を表示する場合は、DISPLAYまたは WRITE ステートメントのフィールド名の後に (1:3) の表記を指定します。以下のプログラム例を参照してください。
** Example 'DISPLX07': DISPLAY (with index notation)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 BIRTH
2 INCOME (1:3)
3 CURR-CODE
3 SALARY
3 BONUS (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY BIRTH
DISPLAY PERSONNEL-ID NAME INCOME (1:3)
SKIP 1
END-READ
END
プログラム DISPLX07 の出力:
DISPLAY ステートメントでは、マルチプルバリューフィールドの複数の値が縦に出力されることに注意してください。
Page 1 04-11-11 14:15:54
PERSONNEL NAME INCOME
ID
CURRENCY ANNUAL BONUS
CODE SALARY
--------- -------------------- -------- ---------- ----------
30020013 GARRET UKL 4200 0
UKL 4150 0
0 0
30016112 TAILOR UKL 7450 0
UKL 7350 0
UKL 6700 0
20017600 PIETSCH USD 22000 0
USD 20200 0
USD 18700 0
WRITE ステートメントでは複数の値が縦ではなく横に表示されるため、これにより行あふれおよび不要な行送りが発生する場合があります。
ピリオディックグループ全体ではなくピリオディックグループ内の単一フィールド(SALARY など)のみを使用し、さらに以下の例の NAME と JOB-TITLE の間のようにスラッシュ(/)を挿入して行送りを行うと、扱いやすいレポートフォーマットになります。
** Example 'WRITEX03': WRITE (with index notation) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 BIRTH 2 JOB-TITLE 2 SALARY (1:3) END-DEFINE * READ (3) VIEWEMP BY BIRTH WRITE PERSONNEL-ID NAME / JOB-TITLE SALARY (1:3) SKIP 1 END-READ END
プログラム WRITEX03 の出力:
Page 1 04-11-11 14:15:55 30020013 GARRET TYPIST 4200 4150 0 30016112 TAILOR WAREHOUSEMAN 7450 7350 6700 20017600 PIETSCH SECRETARY 22000 20200 18700