CHECKR (逆向きの検査)
自由形式構文 | (許可されていない - %CHECKR 組み込み関数を使用) |
コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
---|---|---|---|---|---|---|
CHECKR (E) | 比較ストリング | 基本ストリング: 開始 | 右端の |
_ | ER | FD |
CHECKR 命令は、基本ストリング (演算項目 2) のそれぞれの文字が比較ス トリング (演算項目 1) に示された文字の中に含まれているかどうかを検査し ます。基本ストリングと比較ストリングは同じタイプで、 両方とも文字か、両方とも図形か、あるいは両方とも UCS-2 のいずれかでなければなりません。 (図形タイプと UCS-2 タイプの CCSID 値は同じでなければなりません。) 検査は演算項目 2 の右端の文字から開始されて、右から左へ 1 文字ずつ続けら れます。 基本ストリングのそれぞれの文字が演算項目 1 の文字と比較されます。演算項目 2 の文字に演算項目 1 の文字と一致するものがあれば、次の比較元の文字が検査されます。 一致するものが見付からない場合には、一致する文字 が見付からない文字の位置を示すために、結果フィールドに整数値が入れられ ます。検査は右から行われますが、結果フィールドに入れられる位置は、左からの 相対位置になります。
演算項目 2 の開始位置は、基本ストリングとコロンで区切って指定することが できます。 開始位置は任意指定で、デフォルトの値はストリングの長さになります。 結果フィールドの値は、開始位置に関係なく、基本ストリングの左端位置から の相対値になります。
結果フィールドが配列でない場合には、この命令は、一致しない最初の文字 が見付かったか、または基本ストリングの終わりになった時に停止します。 一致する文字が見付からなかった場合には、結果フィールドはゼロに設定さ れます。
結果フィールドが配列の場合には、この命令は、配列内に要素がある限り、 一致しない最初の文字が見付かった後でも検査を続行します。 配列の要素が一致しない文字より多い場合には、残りのすべての要素がゼロに 設定されます。
演算項目 1 はストリングでなければならず、フィールド名、配列要素、名前 のついた定数、データ構造名、データ構造サブフィールド、リテラル、ま たはテーブル名のいずれかを入れることができます。
演算項目 2 には、基本ストリングまたは基本ストリングにコロンを付けて 開始位置を指定しなければなりません。 演算項目 2 の基本ストリング部分には、フィールド名、配列要素、名前のつい た定数、データ構造名、データ構造サブフィールド名、リテラル、または テーブル名を入れることができます。 演算項目 2 の開始位置部分は小数点以下 の桁数がゼロの数値でなければならず、名前のついた定数、配列要素、フ ィールド名、リテラル、またはテーブル名とすることができます。 開始位置が指定されていない場合には、ストリングの長さが使用されます。
7 から 11 桁目には、有効な標識を指定することができます。
CHECKR 例外 (プログラム状況コード 100) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。
正しくない文字が見付かった場合にオンに設定される標識を 75-76 桁目に 指定することができます。 この情報は %FOUND 組み込み関数からも入手することができます。 この関数は、 正しくない文字が見付かった場合に '1' を戻します。
詳細については、ストリング命令を参照してください。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* Because factor 1 is a blank character, CHECKR indicates the
* position of the first nonblank character. This use of CHECKR
* allows you to determine the length of a string. If STRING
* contains 'ABCDEF ', NUM will contain the value 6.
* If an error occurs, %ERROR is set to return '1' and
* %STATUS is set to return status code 00100.
*
C
C ' ' CHECKR(E) String Num
C
C SELECT
C WHEN %ERROR
C ... an error occurred
C WHEN %FOUND
C ... NUM is less than the full length of the string
C ENDIF
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
*
* After the following example, N=1 and the found indicator 90
* is on. Because the start position is 5, the operation begins
* with the rightmost 0 and the first nonnumeric found is the '$'.
*
D Digits C '0123456789'
D
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
C
C MOVE '$2000.' Salary 6
C Digits CHECKR Salary:5 N 90
C
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
*
* The following example checks that FIELD contains only the letters
* A to J. As a result, ARRAY=(876310) after the CHECKR operation.
* Indicator 90 turns on. %FOUND would return '1'.
D
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
D Array S 1 DIM(6)
D Letter C 'ABCDEFGHIJ'
D
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
C
C MOVE '1A=BC***' Field 8
C Letter CHECKR Field Array 90
C