ILE COBOL 解説書


ALL 添え字付け

関数が、ある引数を不定の回数繰り返すことを認めている場合、 データ名とテーブルを識別する任意の修飾子を指定することで、そのテーブルを参照できます。 この後にすぐ添え字付けを続けて、添え字のうちの 1 つまたは複数を語 ALL にすることができます。

注:
ALL 添え字の評価結果は、少なくとも 1 つの引数にならなくてなりません。 そうでなければ関数によって戻される値が未定義となります。 ただし、*RANGE コンパイラー・オプションを指定することで、状況を実行時に診断できます。

ALL を 1 つの添え字として指定すると、 すべての可能なテーブル・エレメントを、その添え字位置におけるすべての有効な添え字を使用して指定することと同等になります。

「テーブル名 (ALL)」として指定されているテーブル引数に関しては、 各テーブル・エレメントが引数として暗黙に指定される順序は左から右で、 最初 (または左端) の引数は「テーブル名 (1)」となり、ALL は 1 に置き換えられます。 次の引数は「テーブル名 (2)」で、添え字は 1 増やされています。 この処理は、添え字が 1 ずつ増やされて暗黙の引数を生成しながら、ALL 添え字がその値の範囲に増えるまで継続されます。

たとえば、

FUNCTION MEAN(Table(ALL))

は、次と同じです。

FUNCTION MEAN(Table(1) Table(2) Table(3)... Table(n))

ここで、n はテーブル内のエレメントの数です。

複数の ALL 添え字、たとえば「テーブル名 (ALL, ALL, ALL)」がある場合、 最初の暗黙の引数は「テーブル名 (1, 1, 1)」で、 それぞれの ALL は 1 に置き換えられます。次の引数は「テーブル名 (1, 1, 2)」で、 右端の添え字が 1 増やされます。右端の ALL で表されている添え字はその値の範囲まで増やされ続けて、 それぞれの値の暗黙の引数を生成します。

ALL として指定された添え字がいったん値の範囲まで増えると、ALL と指定された次の左の添え字が 1 増やされます。 新たに増やされた添え字の右にある、ALL として指定されている各添え字が、暗黙の引数を生成するために 1 に設定されます。 再度右端の ALL で表されている添え字が、その値の範囲まで増え続け、それぞれの値のための暗黙の引数を生成します。 この処理は、ALL と指定されているそれぞれの添え字が、それぞれの値の範囲まで増え続けるまで継続されます。

たとえば、

FUNCTION MEAN(Table(ALL, ALL))

は、次と同じです。

FUNCTION MEAN(Table(1, 1) Table(1, 2) Table(1, 3)... Table(1, n)
              Table(2, 1) Table(2, 2) Table(2, 3)... Table(2, n)
              Table(3, 1) Table(3, 2) Table(3, 3)... Table(3, n)
                                   .
                                   .
                                   .
              Table(m, 1) Table(m, 2) Table(m, 3)... Table(m, n))

ここで、n はテーブルの列数をあらわす次元のエレメント数で、m はテーブルの行数をあらわす次元のエレメント数です。

ALL 添え字は、リテラル添え字、データ名添え字、または指標名添え字と結合して、多次元テーブルを参照できます。

たとえば、

FUNCTION MEAN(Table(ALL, 2))

は、次と同じです。

FUNCTION MEAN(Table(1, 2)
              Table(2, 2)
              Table(3, 2)
                  .
                  .
                  .
              Table(m, 2))

ここで、m はテーブルの行次元のエレメント数です。

ALL 添え字が引数として指定され、その引数が参照変更されている場合、 その参照修飾子はテーブルの暗黙に指定されたそれぞれのエレメントに対して適用されます。

ALL 添え字が参照変更されるオペランドとして指定されている場合、 その参照修飾子は、テーブルの暗黙に指定されたそれぞれのエレメントに対して適用されます。

ALL 添え字が OCCURS DEPENDING ON 文節と関連している場合、 値の範囲は、OCCURS DEPENDING ON 文節のオブジェクトによって決定されます。

たとえば、次のような給与計算のレコード定義が与えられたとします。

01 PAYROLL.
  02 PAYROLL-WEEK   PIC 99.
  02 PAYROLL-HOURS  PIC 999 OCCURS 1 TO 52
     DEPENDING ON PAYROLL-WEEK.

次の COMPUTE ステートメントを使用して、任意の週の平均作業時間を割り出すことができます。

次の COMPUTE ステートメントを使用して、 今日までの 1 年間の合計時間、任意の週の最長作業時間、および最長時間に対応する特定の週を判別できます。

COMPUTE YTD-HOURS = FUNCTION SUM (PAYROLL-HOURS(ALL))
     COMPUTE MAX-HOURS = FUNCTION MAX (PAYROLL-HOURS(ALL))
     COMPUTE MAX-WEEK  = FUNCTION ORD-MAX (PAYROLL-DAYS(ALL))

この関数呼び出しでは、ALL 添え字を使用して PAYROLL-HOURS 配列のすべてのエレメント (PAYROLL-WEEK フィールドの実行時間値によって異なる) を参照できます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]