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 の開始位置部分は小数点以下 の桁数がゼロの数値でなければならず、名前のついた定数、配列要素、フ ィールド名、リテラル、またはテーブル名とすることができます。 開始位置が指定されていない場合には、ストリングの長さが使用されます。

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

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

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

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

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

図 1. CHECKR 命令
*...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                           
図 2. CHECKR 命令
*...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
図 3. CHECKR 命令
*...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