CHECK (文字の検査)
自由形式構文 | (許可されていない - %CHECK 組み込み関数を使用) |
コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
---|---|---|---|---|---|---|
CHECK (E) | 比較ストリング | 基本ストリング: 開始 | 左端の |
_ | ER | FD |
CHECK 命令は、基本ストリング (演算項目 2) のそれぞれの文字が比較ストリ ング (演算項目 1) に示された文字の中に含まれているかどうかを検査します。基本ストリングと比較ストリングは同じタイプで、 両方とも文字か、両方とも図形か、あるいは両方とも UCS-2 のいずれかでなければなりません。 (図形タイプと UCS-2 タイプの CCSID 値は同じでなければなりません。) 検査は演算項目 2 の左端の文字から開始されて、左から右へ 1 文字ずつ続けら れます。 基本ストリングのそれぞれの文字が演算項目 1 の文字と比較されます。演算項目 2 の文字に演算項目 1 の文字と一致するものがあれば、基本ストリングの次の文字が検査されます。 一致するものが見付からない場合には、一致する文字 が見付からない文字の位置を示すために、結果フィールドに整数値が入れられ ます。
演算項目 2 の開始位置は、基本ストリングとコロンで区切って指定することが できます。 開始は任意指定で、デフォルトの値は 1 です。 開始位置が 1 より大きい場合には、結果フィールドの値は、開始位置に関係な く基本ストリングの左端からの相対位置になります。
この命令は、一致しない最初の文字が見付かったか、あるいは基本ストリング の終わりになった時に検査を停止します。 一致する文字が見付からなかった場合には、結果フィールドはゼロに設定さ れます。
結果フィールドが配列の場合には、この命令は、配列内に要素がある限り、 一致しない最初の文字が見付かった後でも検査を続行します。 配列の要素が一致しない文字より多い場合には、残りのすべての要素がゼロに 設定されます。
演算項目 1 はストリングでなければならず、フィールド名、配列要素、名前の ついた定数、データ構造名、データ構造サブフィールド、リテラル、また はテーブル名のいずれかを入れることができます。
演算項目 2 には、基本ストリングまたは基本ストリングにコロンを付けて 開始位置を指定しなければなりません。 演算項目 2 の基本ストリング部分には、フィールド名、配列要素、名前のつい た定数、データ構造名、リテラル、またはテーブル名を入れることができ ます。 演算項目 2 の開始位置部分は小数点以下 の桁数がゼロの数値でなければならず、名前のついた定数、配列要素、フ ィールド名、リテラル、またはテーブル名とすることができます。 開始位置が指定されていない場合には、値 1 が使用されます。
7 から 11 桁目には、有効な標識を指定することができます。
CHECK 例外 (プログラム状況コード 100) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。
正しくない文字が見付かった場合にオンに設定される標識を 75-76 桁目に 指定することができます。 この情報は %FOUND 組み込み関数からも入手することができます。 この関数は、 正しくない文字が見付かった場合に '1' を戻します。
詳細については、ストリング命令を参照してください。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
* In this example, the result will be N=6, because the start
* position is 2 and the first nonnumeric character found is the '.'.
* The %FOUND built-in function is set to return '1', because some
* nonnumeric characters were found.
*
D
D Digits C '0123456789'
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
C
C MOVE '$2000.' Salary
C Digits CHECK Salary:2 N
C IF %FOUND
C EXSR NonNumeric
C ENDIF
*
* Because factor 1 is a blank, CHECK indicates the position
* of the first nonblank character. If STRING contains '␢␢␢th
* NUM will contain the value 4.
*
C
C ' ' CHECK String Num 2 0
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
* The following example checks that FIELD contains only the letters
* A to J. As a result, ARRAY=(136000) after the CHECK operation.
* Indicator 90 turns on.
*
D
D Letter C 'ABCDEFGHIJ'
D
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
C
C MOVE '1A=BC*' Field 6
C Letter CHECK Field Array 90
C
*
* In the following example, because FIELD contains only the
* letters A to J, ARRAY=(000000). Indicator 90 turns off.
*
C
C MOVE 'FGFGFG' Field 6
C Letter CHECK Field Array 90
C
C
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D
* The following example checks a DBCS field for valid graphic
* characters starting at graphic position 2 in the field.
D
* Value of Graffld is 'DDBBCCDD'.
* The value of num after the CHECK is 4, since this is the
* first character 'DD' which is not contained in the string.
D
D Graffld 4G INZ(G'oDDBBCCDDi')
D Num 5 0
D
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.
C
C
C G'oAABBCCi' check Graffld:2 Num