自由形式構文 | (許可されていない - %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 になる) が入ります。
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
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.