指標名を識別する OCCURS 文節の INDEXED BY 句を使用して、指標を作成します。
例えば、以下のコードにおける INX-A は指標名です。
05 TABLE-ITEM PIC X(8)
OCCURS 10 INDEXED BY INX-A.
コンパイラーは、指標に含まれる値を、オカレンス番号 (添え字) から 1 引いた値にテーブル・エレメントの長さを掛けた値として計算します。 したがって、TABLE-ITEM の 5 回目のオカレンスの場合、INX-A に含まれる 2 進値は、(5 - 1) * 8、すなわち 32 です。
指標名を使用して別のテーブルを参照できるのは、両方のテーブル記述のテーブル・エレメントの数が同じであり、テーブル・エレメントが同じ長さである場合のみです。
USAGE IS INDEX 文節を使用して指標データ項目を作成でき、また任意のテーブルで指標データ項目を使用できます。 例えば、以下のコードの INX-B は指標データ項目です。
77 INX-B USAGE IS INDEX.
. . .
SET INX-A TO 10
SET INX-B TO INX-A.
PERFORM VARYING INX-A FROM 1 BY 1 UNTIL INX-A > INX-B
DISPLAY TABLE-ITEM (INX-A)
. . .
END-PERFORM.
上のテーブル TABLE-ITEM を全探索するのに、指標名 INX-A を使用します。 テーブルの最後のエレメントの指標を保持するには、指標データ項目 INX-B を使用します。このタイプのコーディングの利点は、テーブル・エレメントのオフセットの計算が最小限で済み、UNTIL 条件の変換が不要であることです。
上のステートメント SET INX-B TO INX-A のように、SET ステートメントを使用すれば、指標名に保管した値を指標データ項目に割り当てることができます。例えば、レコードを可変長テーブルにロードするとき、最後のレコードの指標値を、USAGE IS INDEX として定義されたデータ項目に保管できます。そのあと、現行の指標値を最後のレコードの指標値と比較することによって、テーブルの終わりをテストすることができます。この手法は、テーブルを初めから終わりまで検索したり、テーブルを処理したりする場合に有用です。
基本整数データ項目またはゼロ以外の整数リテラルによって指標名を増分したり、減分したりすることができます。例えば、次のとおりです。
SET INX-A DOWN BY 3
整数は出現回数を表します。 索引に対して加算または減算される前に、指標値に変換されます。
SET、PERFORM VARYING、または SEARCH ALL ステートメントを使用して、指標名を初期化してください。 そのあと、索引名を SEARCH ステートメントまたは関係条件ステートメントでも使用できるようになります。値を変更するには、PERFORM、SEARCH、または SET ステートメントを使用してください。
物理的変位を比較するので、SEARCH および SET ステートメントでのみ、あるいは指標または他の指標データ項目との比較にのみ、指標データ項目を直接使用できます。 指標データ項目を添え字または指標として使用することはできません。
関連タスク
添え字付け
テーブルに値を入れる方法
テーブルの探索
組み込み関数を使用したテーブル項目の処理
テーブルの効率的処理
関連参照
INDEXED BY 句
(「COBOL for Windows 言語解説書」)
INDEX 句
(「COBOL for Windows 言語解説書」)
SET ステートメント
(「COBOL for Windows 言語解説書」)