添え字付け

添え字付け とは、 添え字を利用してテーブル参照を行う手法のことです。 添え字 は正の整数で、その値はテーブル・エレメントのオカレンス番号を指定します。

フォーマット

構文図を読むビジュアル構文図をスキップcondition-name-1data-name-1INOFdata-name-2INOFfile-name-1( integer-1ALLdata-name-3 +  - integer-2index-name-1 +  - integer-3 )
condition-name-1
条件名-1 の条件変数は、OCCURS 節を含んでいるか、OCCURS 節を含むデータ記述項目に従属していなければなりません。
data-name-1
OCCURS 節を含んでいるか、OCCURS 節を含むデータ記述項目に従属していなければなりません。
data-name-2 , file-name-1
データ名-1 が含まれているデータ項目またはレコードでなければなりません。
integer-1
符号を付けることができます。 符号を付ける場合、その符号は正でなければなりません。
すべて
これは、condition-name-1 が指定されている場合は指定してはなりません。

これは、添え字付きの ID が組み込み関数の引数として使用されている場合にのみ、またはフォーマット 2 SORT ステートメント (テーブル SORT ステートメント) でテーブルを識別するためにのみ使用する必要があります。

ALL が指定された場合は、ALL 添え字の許可対象となる関数の規則において指定されているように、添え字は関連テーブルの添え字のすべての使用可能な値です。

data-name-3
整数を表す数字基本項目でなければなりません。

データ名-3 は修飾することができます。

index-name-1
参照されるテーブルの階層内にあって、 その名前を指定している INDEXED BY 句が含まれているデータ記述項目に対応します。
integer-2 , integer-3
符号を付けることはできません。

添え字は括弧に囲んで、テーブル・エレメントの名前の修飾のすぐ後に続けて記述します。 このような参照における添え字の個数は、 参照されるエレメントを含むテーブルの次元数と同じでなければなりません。 つまり、該当のデータ名自体も含めて、 そのデータ名を含む階層の各 OCCURS 節ごとに対応する添え字がなければなりません。

複数の添え字が必要な場合には、データ編成の次元が低い順から指定します。 多次元テーブルが一連のネストされたテーブルとしてみなされ、 ネストの中で最も包括的または最外部のテーブルがメジャー・テーブルで、 最も内側または最も包括的でないテーブルがマイナー・テーブルとみなされる場合は、 添え字は左から右へ、メジャー、中間、マイナーの順に指定されます。

例えば、TABLE-THREE が次のように定義されているとします。


01  TABLE-THREE.
    05  ELEMENT-ONE OCCURS 3 TIMES.
        10  ELEMENT-TWO OCCURS 3 TIMES.
            15  ELEMENT-THREE OCCURS 2 TIMES    PIC X(8).

TABLE-THREE の有効な添え字付き参照は次のようになります。


ELEMENT-THREE (2 2 1)

添え字付き参照も参照変更にすることができます。 参照変更の例の 3 番目の例を参照してください。 ある項目に対する参照には、その項目がテーブル・エレメント、あるいはテーブル・エレメントに関連付けられた項目または条件名でない限り、添え字を付けることはできません。

各テーブル・エレメント参照は、次のような参照がある場合を除いて、 添え字を付ける必要があります。

  • USE FOR DEBUGGING ステートメントの中
  • SEARCH ステートメントのサブジェクトとして
  • REDEFINES 節の中
  • OCCURS 節の KEY IS 句の中
  • フォーマット 2 SORT ステートメント (テーブル SORT ステートメント) の中

フォーマット 2 SORT ステートメントでは、右端の添え字をワード ALL にして添え字付けを指定できます。

添え字によって表される最も低い許容オカレンス番号は 1です。 特定の場合に許容される最大オカレンス番号は、 OCCURS 節に指定された項目の最大オカレンス番号です。

データ名を使用した添え字付け

データ名を使用して添え字を表す場合、 そのデータ名は別のテーブルの中の項目を参照するために使用できます。 これらのテーブルは、同じサイズのエレメントを持つ必要はありません。 同じデータ名は、1 つの項目を持つ 1 つだけの添え字として、 および別の項目を持つ 2 つ以上の添え字の 1 つとして指定することができます。 データ名の添え字は修飾できます。しかし、添え字や指標を付けることはできません。 例えば、TABLE-THREE に対する有効な添え字付き参照 (SUB1SUB2、および SUB3 はすべて SUBSCRIPT-ITEM に従属する項目であると想定) には以下が含まれます。


ELEMENT-THREE (SUB1 SUB2 SUB3)

ELEMENT-THREE IN TABLE-THREE (SUB1 OF SUBSCRIPT-ITEM,
    SUB2 OF SUBSCRIPT-ITEM, SUB3 OF SUBSCRIPT-ITEM)

指標名を使用した添え字付け (指標付け)

指標付けを行うことによって、テーブルの検索や特定の項目の処理などの操作ができるようになります。 指標付けを使用するには、1 つ以上の指標名をデータ記述項目に OCCURS 節を含む項目と関連付けます。

指標名に関連付けられる指標は添え字の働きをし、 その値は指標名が関連付けられている項目のオカレンス番号に対応しています。

INDEXED BY 句は、指標名を識別し、 特定のテーブルに関連付ける場合に使用されるものですが、 OCCURS 節のオプショナル部分です。 指標名に関連付けられる指標を記述するための別個の項目はありません。 実行時には、指標の内容が、 それが関連付けられるテーブルの特定の次元のオカレンス番号に対応します。

実行時の指標の初期値は不定であり、 添え字として使用する前に初期設定しなければなりません。 指標の初期値の割り当ては、次のステートメントのいずれかによって行います。

  • VARYING 句を伴う PERFORM ステートメント
  • ALL 句を伴う SEARCH ステートメント
  • SET ステートメント

整数またはデータ名を、 テーブル・エレメントまたはテーブル・エレメント内の項目を参照する添え字として使用しても、 そのテーブルに関連付けられた指標が変更されることはありません。

テーブルを参照するために指標名を使用することができます。 しかし、 参照されているテーブルと索引名が関連付けられているテーブルの各エレメントの長さがそれぞれ一致している必要があります。 一致していない場合は、 参照はそれぞれのテーブルの同じテーブル・エレメントに対するものにならず、 実行時エラーが発生する可能性があります。

テーブル形式で配列されているデータは、頻繁に検索されることになります。 SEARCH ステートメントは、逐次検索や非逐次検索が行える機能を備えています。 このステートメントは、テーブルを検索し、特定の条件を満たすテーブル・エレメントをテーブルから検索し、関連付けられた指標の値を そのテーブル・エレメントを指し示すように調整する場合に使います。

実行中に有効であるためには、指標の値は 1 以上、かつ最大許容オカレンス番号以下のテーブル・エレメントの オカレンスに対応している必要があります。

インデックス名の詳細については、インデックス名INDEXED BY phraseを参照のこと。

相対添え字付け

相対添え字付け では、テーブル・エレメント名の後に添え字が付けられます。添え字は、データ名または指標名の後に + または - が付き、正の整数リテラルまたは符号なし整数リテラルが続く形式です。

演算子の + と - の前後にはスペースが必要です。 使用される添え字の値は、 指標名またはデータ名が整数の値によって上下に設定されているかのように、 それらの値は同じになります。 相対指標付けを使用しても、 プログラムが指標の値を変更することはありません。