| フォーマット/長さ: | I4 |
システム関数 POS(field-name) は、システム関数で指定される名前を持つフィールドの内部識別子を返します。返される値は、フィールドアドレスの内部表現です。
POS(field-name) は、マップ内の位置と関係なく、特定のフィールドを識別するのに使用できます。これは、マップ内のフィールドのシーケンスと数が変更されても、POS(field-name) は引き続き同じフィールドを一意に識別できることを意味します。これにより、例えば、プログラムロジックに依存しているとフィールドに MARK を付ける場合、必要なのは 1 つの REINPUT ステートメントのみになります。
例:
DECIDE ON FIRST VALUE OF ...
VALUE ...
COMPUTE #FIELDX = POS(FIELD1)
VALUE ...
COMPUTE #FIELDX = POS(FIELD2)
...
END-DECIDE
...
REINPUT ... MARK #FIELDX
POS で指定されたフィールドが配列の場合、POS(FIELDX(5)) のように特定のオカレンスを指定する必要があります。POS を配列範囲に適用することはできません。
注意:POS は同じ格納場所で開始する 2 つの異なる変数(REDEFINE 変数)を区別することはできません。これは、POS によって返される内部フィールドのアドレスが両方とも同じであるためです。
システム関数 POS(field-name) は、カーソルが現在位置づけられているフィールドに応じて特定の機能を実行するために、Natural システム変数 *CURS-FIELD と組み合わせて使用できます。
*CURS-FIELD は、カーソルが現在位置づけられているフィールドの内部識別子を持ちます。これは単体では使用できず、POS(field-name) と組み合わせて使用する必要があります。これらを使用して、現在カーソルが特定のフィールドに置かれているかどうかを確認し、その状況に応じて処理を実行できます。
例:
IF *CURS-FIELD = POS(FIELDX) MOVE *CURS-FIELD TO #FIELDY END-IF ... REINPUT ... MARK #FIELDY
注意:
*CURS-FIELD および POS(field-name) の値は、フィールドの内部識別子としてのみ機能し、算術演算に使用することはできません。
EXPAND、RESIZE、または REDUCE ステートメントを使用して変更された後には、X-array(最低でも 1 次元の最低でも 1 つの境界が拡張可能として定義されている配列)のオカレンスに対して POS(field-name) から返される値は変わることがあります。
*CURS-FIELD および POS(field-name) がコンテキスト変数を参照する場合、結果の情報は同じ会話内でのみ使用できます。
*CURS-FIELD によって識別されます。*CURS-FIELD を POS 関数と併せて使用することにより、入力にフォーカスがあり、その条件に応じて処理を実行するコントロールをチェックできます。
*CURS-FIELD と POS(field-name) は、同じ格納場所で開始する 2 つの異なる変数(REDEFINE 変数)を区別することはできません。これは、*CURS-FIELD と POS(field-name) によって返される内部フィールドのアドレスが両方とも同じ変数であるためです。
『プログラミングガイド』の「ダイアログの設計」、「フィールドに基づいた処理」、および「プログラミングの単純化」も参照してください。