フォーマット/長さ: | 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)
によって返される内部フィールドのアドレスが両方とも同じ変数であるためです。
『プログラミングガイド』の「ダイアログの設計」、「フィールドに基づいた処理」、および「プログラミングの単純化」も参照してください。