マルチプルバリューフィールドとピリオディックグループのインデックス表記

このドキュメントでは、インデックス表記 (n:n) を使用して、出力するマルチプルバリューフィールドの値の個数、または出力するピリオディックグループのオカレンス数を指定する方法について説明します。

以下のトピックについて説明します。


インデックス表記の使用

インデックス表記 (n:n) を使用すると、出力するマルチプルバリューフィールドの値の個数またはピリオディックグループのオカレンス数を指定できます。

例えば、DDMEMPLOYEES のフィールド INCOME は、ある従業員が会社に雇用されてからの年ごとの年間収入記録を保持するピリオディックグループです。

これらの年間収入は年順に保持されています。最新の年収は、オカレンス 1 に含まれています。

従業員の最近 3 年間の年間収入、つまりオカレンス 13 を表示する場合は、DISPLAYまたは WRITE ステートメントのフィールド名の後に (1:3) の表記を指定します。以下のプログラム例を参照してください。

DISPLAY ステートメントのインデックス表記の例

** 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 など)のみを使用し、さらに以下の例の NAMEJOB-TITLE の間のようにスラッシュ(/)を挿入して行送りを行うと、扱いやすいレポートフォーマットになります。

WRITE ステートメントのインデックス表記の例

** 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