配列要素の検索

%LOOKUPxx(配列要素の検索)

[一般形式]

%LOOKUP ( 検索値 : 配列{: 開始指数{: 検索要素個数 }})

%LOOKUPLT ( 検索値 : 配列{: 開始指数{: 検索要素個数 }})

%LOOKUPLE ( 検索値 : 配列{: 開始指数{: 検索要素個数 }})

%LOOKUPGT ( 検索値 : 配列{: 開始指数{: 検索要素個数 }})

%LOOKUPGE ( 検索値 : 配列{: 開始指数{: 検索要素個数 }})

%LOOKUP :正確に一致するもの。
%LOOKUPLT:引数に最も近いが、引数よりも小さいもの。
%LOOKUPLE:正確に一致しているか、または引数に最も近いが引数よりは小さい値。
%LOOKUPGT:引数に最も近いが、引数より大きいもの。
%LOOKUPGE:正確に一致しているか、または引数に最も近いが引数より大きい値。

指定された条件に一致する値がない場合は、ゼロが戻されます。 戻り値は符号なし整数形式 (タイプ U) です。

検索は指標開始指標 から始まり、要素数 個の要素について続けられます。デフォルトでは、配列全体が検索されます。

配列データ構造を検索するには、データ構造名と指標 (*) を指定してから、検索のキーとして使用するサブフィールドを指定します。 例えば、配列データ構造 INFO のサブフィールド CODE で値 'XP2' を検索する場合、 最初のパラメーターとして 'XP2' を指定し、2 番目のパラメーターとして INFO(*).CODE を指定します。 修飾名で指標 (*) までの部分が配列を表し、 (*) の後の部分が、スカラー・サブフィールド、またはスカラーの指標付き配列を表す必要があります。

最初の 2 つのパラメーターはどんなタイプであっても構いませんが、同じタイプでなければなりません。 キー付きデータ構造配列の場合、最初のパラメーターは、キーとタイプが同じでなければなりません。 これらの長さまたは小数点以下の桁数は、同じである必要はありません。3 番目と 4 番目のパラメーターは、小数点以下の桁数がゼロの非浮動数値である必要があります。

%LOOKUPLT、%LOOKUPLE、%LOOKUPGT、および %LOOKUPGE の場合、配列がキーワード ASCEND または DESCEND を使用して定義されている必要があります。引数 または配列 が ALTSEQ(*NONE) を指定して定義されている場合を除 き、ALTSEQ テーブルが使用されます。

組み込み関数 %FOUND と %EQUAL は %LOOKUP 命令に続けて設定されません。

%LOOKUPxx 組み込み関数は、順序配列 (ASCEND または DESCEND キーワードが指定された配列) を検索するために二分探索を使用します。

注意

LOOKUP 命令コードとは異なり、%LOOKUP は配列にのみ適用されます。テーブル内の値を検索するには %TLOOKUP 組み込み関数を使用します。

パラメータに指定する配列は定義仕様書に順序付けが明言されていなければならない。
キーワード:昇順(ASCEND)  降順(DESCEND)

使用例

              
_*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....8.
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D ARR           1   12  DIM(6) ASCEND
D ARR01          1    2 0 INZ(9)
D ARR02          3    4 0 INZ(13)
D ARR03          5    6 0 INZ(17)
D ARR04          7    8 0 INZ(21)
D ARR05          9   10 0 INZ(25)
D ARR06          11   12 0 INZ(29)

CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C          EVAL   N = %LOOKUP(8:ARR)
C* // N = 0
C          EVAL   N = %LOOKUP(9:ARR)
C* // N = 1
C          EVAL   N = %LOOKUPLE(5:ARR)
C* // N = 0
C          EVAL   N = %LOOKUPLE(13:ARR)
C* // N = 2
C          EVAL   N = %LOOKUPLT(13:ARR)
C* // N = 1
C          EVAL   N = %LOOKUPGE(25:ARR)
C* // N = 5
C          EVAL   N = %LOOKUPGT(25:ARR)
C* // N = 6