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 が使用されます。

結果フィールドは、数値変数、数値配列要素、数値テーブル名、または数値配 列とすることができます。 フィールドまたは配列は、小数点以下の桁数にゼロを指定して定義します。 図形データまたは UCS-2 データを使用する場合には、結果フィールドには、2 バイト文字位置 (すなわち、 位置 3 である、3 番目の 2 バイト文字が文字位置 5 になる) が入ります。
注: 演算項目 1、演算項目 2、または結果フィールドに形象定数を使用することは できません。演算項目 1 と結果フィールド、または演算項目 2 と結果フィールドのデータ構 造にオーバーラップがあってはなりません。

7 から 11 桁目には、有効な標識を指定することができます。

CHECK 例外 (プログラム状況コード 100) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。

正しくない文字が見付かった場合にオンに設定される標識を 75-76 桁目に 指定することができます。 この情報は %FOUND 組み込み関数からも入手することができます。 この関数は、 正しくない文字が見付かった場合に '1' を戻します。

詳細については、ストリング命令を参照してください。

図 1. CHECK 命令
*...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
図 2. CHECK 命令
*...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
図 3. 図形データによる CHECK 命令
*...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