LOOKUP (テーブルまたは配列要素の検索)
コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
---|---|---|---|---|---|---|
LOOKUP | ||||||
(配列) | 検索引数 | 配列名 | HI | LO | EQ | |
(テーブル) | 検索引数 | テーブル名 | テーブル名 | HI | LO | EQ |
- 文字データ
- 制御仕様書に ALTSEQ(*EXT) が指定されている場合には、 文字の LOOKUP に代替照合順序が使用されます。 ただし、演算項目 1 または演算項目 2 のいずれかが、定義仕様書で ALTSEQ(*NONE) を指定 して定義されている場合は除きます。 ALTSEQ(*SRC) または代替順序が指定されてい ない場合には、文字の LOOKUP に代替順序は使用されません。
- 図形および UCS-2 データ
- 比較は 16 進数です。どのような場合にも代替照合順序は使用されません。
- 数値データ
- 演算項目 2 の配列またはテーブルのタイプが浮動である場合を除き、 数値データ内の小数点は無視されます。
- その他のデータ・タイプ
- 比較命令で説明されている比較に関する考慮事項はその他 のタイプにも適用されます。
演算項目 1 にテーブルが指定されている場合には、使用される検索引数は LOOKUP 命令で最後に選択されたテーブルの要素か、または前の LOOKUP が処理 されていなければテーブルの最初の要素になります。 検索する配列またはテーブルは演算項目 2 に指定します。
テーブルの LOOKUP の場合には、結果フィールドに 2 番目のテーブルの名前 を入れて、そこから要素 (最初のテーブルの要素と対応する位置にある) を検 索することができます。 検索したい要素を参照するために 2 番目のテーブルの 名前を使用することができます。 演算項目 2 に配列名が入っている場合には、 結果フィールドはブランクでなければなりません。
結果の標識は LOOKUP の検索条件を指定します。 この標識は、最初に、実行される検索 を判別し、次にその検索の結果を反映するために、 71 から 76 桁目に指定しなければなりません。 指定された標識がオンに設定されるのは、検索が正常に実行された場合だけです。 使用できる標識の数は 2 つ以下です。 結果の標識は、等 (EQ) と高 (HI) または等 (EQ) と低 (LO) に割り当てることができます。 プログラムは、指定された優先順位が等しいどちらかの 条件を満たす項目を検索します (すなわち、等しい項目が見付からない場合には、 低い方または高い方で一番近い項目が選択されます)。
75 から 76 桁目に標識を指定した場合、%EQUAL 組み込み関数は、検索引数に正確に一致 する要素が見付かった場合に '1' を戻します。%FOUND 組み込み関数は、指定された検索が成功した場合に '1' を 戻します。
- 高 (71-72): プログラムに、検索引数に一番近くて、 しかも順序が高い項目を見付けるように指示します。そのような高位の項目が見付かった場合には、高の標識がオンに設定されま す。 例えば、昇順の配列に値 A B C C C D E が入っていて、検索引数が B の場 合には、最初の C がこの検索の条件を満たすことになります。 降順の配列に E D C C C B A が入っていて、検索引数が B の場合には、最後 の C がこの検索の条件を満たすことになります。 配列またはテーブルに検索引数より高位の項目が見付からない場合には、検索 は失敗となります。
- 低 (73-74): プログラムに、検索引数に一番近くて、 しかも順序が低い項目を見付けるように指示します。そのような低位の項目が見付かった場合には、低の標識がオンに設定されま す。 例えば、昇順の配列に値 A B C C C D E が入っていて、検索引数が D の場 合には、最後の C がこの検索の条件を満たすことになります。 降順の配列に E D C C C B A が入っていて、検索引数が D の場合には、最初 の C がこの検索の条件を満たすことになります。 配列またはテーブルに検索引数より低位の項目が見付からない場合には、検索 は失敗となります。
- 等 (75-76): プログラムに、検索引数に等しい項目を 見付けるように指示します。 等しい最初の項目が見付かると、 等の標識がオンに設定されます。 検索引数に等しい項目が見付からない場合には、検索は失敗となります。
- 検索引数と配列またはテーブルは、同じタイプで同じ長さでなければなり ません (長さが異なる場合がある時刻および日付フィールドを除く)。 配列またはテーブルが固定長文字、図形、または UCS-2 である場合、検索引数も固定長でなければなりません。可変長の 場合、検索引数の長さは、配列またはテーブルと異なる長さでもかまいません。
- 配列で LOOKUP が処理されて指標が使用されている場合には、LOOKUP はそ の指標によって指定された要素から開始されます。 指標値は見付かった要素の 位置番号に設定されます。 検索の開始時に、指標がゼロに等しいかまたは配 列内の要素の数より大きい場合にはエラーになります。 検索が失敗となった場合には、指標は 1 に設定されます。指標が名前のついた定数の場合には、指標値は変わりません。
- 高、低、高と等、または低と等について検索できるのは、定義仕様書で配列 またはテーブルに ASCEND または DESCEND キーワードで順序が指定されている 場合だけです。
- 検索が失敗となった場合には、結果の標識はオンに設定されません。
- 等の標識 (75 から 76 桁目) だけが使用されている場合には、LOOKUP 命令で 配列またはテーブル全体が検索されます。 配列またはテーブルが昇順になっていて、等しいかどうかだけを比較したい場 合には、高の標識を指定することによって配列またはテーブル全体の検索を避 けることができます。
- 配列が昇順または降順になっていない場合には、LOOKUP 命令で予期しない 結果になることがあります。
- すべての定義済み要素が割り振り済みでない動的割り振り配列に 対する LOOKUP 命令によって、エラーが発生する可能性があります。
詳細については、配列命令を参照してください。
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* In this example, the programmer wants to know which element in
* ARY the LOOKUP operation locates. The Z-ADD operation sets the
* field X to 1. The LOOKUP starts at the element ARY that is
* indicated by field X and continues running until it finds the
* first element equal to SRCHWD. The index value, X, is set to
* the position number of the element located.
C
C Z-ADD 1 X 3 0
C SRCHWD LOOKUP ARY(X) 26
C
* In this example, the programmer wants to know if an element
* is found that is equal to SRCHWD. LOOKUP searches ARY until it
* finds the first element equal to SRCHWD. When this occurs,
* indicator 26 is set on and %EQUAL is set to return '1'.
C
C SRCHWD LOOKUP ARY 26
C
* The LOOKUP starts at a variable index number specified by
* field X. Field X does not have to be set to 1 before the
* LOOKUP operation. When LOOKUP locates the first element in
* ARY equal to SRCHWD, indicator 26 is set on and %EQUAL is set
* to return '1'. The index value, X, is set to the position
* number of the element located.
*
C
C SRCHWD LOOKUP ARY(X) 26
* In this example, an array of customer information actually consists
* of several subarrays. You can search either the main array or the
* subarrays overlaying the main array.
D custInfo DS
D cust DIM(100)
D name 30A OVERLAY(cust : *NEXT)
D id_number 10I 0 OVERLAY(cust : *NEXT)
D amount 15P 3 OVERLAY(cust : *NEXT)
* You can search for a particular set of customer information
* by doing a search on the "cust" array
C custData LOOKUP cust(i) 10
* You can search on a particular field of the customer information
* by doing a search on one of the overlay arrays
C custName LOOKUP name(i) 11
* After the search, the array index can be used with any of the
* overlaying arrays. If the search on name(i) is successful,
* the id_number and amount for that customer are available
* in id_number(i) and amount(i).