位置指定モードでは、バッファーの位置がポインター変数に割り当てられます。 基底付き変数は、レコードについて記述しています。 別々の基底付き変数を使用すれば、同じデータを別々に解釈させることが できます。 また、位置指定モードを使用すれば、自己定義レコードを読み取ることもできます。 自己定義レコードでは、そのレコードの一部に入っている情報が、そのレコードの残りの部分の 構造体を表します。 例えば、そのような情報としては、配列の境界や、そのデータの属性に合わせてどの基底付き 構造体を使用する必要があるかを表すコードなどがあります。
SET オプションが指定された READ ステートメントは、レコードが入っているバッ ファーを示すために、SET オプションで指定されたポインター変数をセットします。 したがって、このポインター変数で修飾された基底付き変数を使用すれば、 レコードのデータを参照することができます。
このポインター値は、同じファイルを参照する次の READ ステートメントまたは CLOSE ステートメントが実行されるまで有効です。
SET オプションで指定したポインター変数が使用されるか、または SET を 省略した場合は基底付き変数の宣言内で指定したポインター変数が使用されます。 このポインター値は、同じファイルを参照する次のステートメント LOCATE、WRITE、 または CLOSE が実行されるまで有効です。 REFER オプションで指定された基底付き変数のコンポーネントを初期設定します。
LOCATE ステートメントは、次のレコードを構築することができるだけの大きさを持つ 区域に、ポインター変数をセットします。
LOCATE ステートメントを実行したあとは、LOCATE ステートメントによってセッ トされたポインター変数で修飾された基底付き変数に、値を直接割り当てることができます。
次に、位置指定モードの入力の例を示します。
dcl 1 Data based(P), 2
·
·
·
; on endfile(In) ; read file(In) set(P); do while (¬endfile(In));
·
·
·
/* process record */ read file(In) set(P); end;
次に、位置指定モードの出力の例を示します。
dcl 1 Data based(P); 2
·
·
·
; do while (More_records_to_write); locate Data file(Out);
·
·
·
/* build record */ end;