INSPECT ステートメントは、データ項目の文字または文字のグループを検査して、以下のことを実行します。
フォーマット 1: TALLYING 句を含む INSPECT ステートメント >>-INSPECT--ID-1--TALLYING--------------------------------------> .-------------------------------------------------------------. | .----------------------------------------------. | | | .---------. | | V V V | | | >----ID-2--FOR----+-CHARACTERS----| 句 1 |-+------------------+-+-+->< | .-------------------------. | | | .---------. | | | V V | | | '-+-ALL-----+----+-ID-3---+----| 句 1 |-+-+-' '-LEADING-' '-リテラル-1-' 句 1 |--+-BEFORE-+--+---------+--+-ID-4---+--------------------------| '-AFTER--' '-INITIAL-' '-リテラル-2-'
フォーマット 2: REPLACING 句を含む INSPECT ステートメント >>-INSPECT--ID-1--REPLACING-------------------------------------> .--------------------------------------------------------------. | .---------. | V V | | >----+-CHARACTERS BY--+-ID-5---+----| 句 1 |-+-------------------+-+->< | '-リテラル-3-' | | .-----------------------------------------. | | | .---------. | | | V V | | | '-+-ALL-----+----+-ID-3---+--BY--+-ID-5---+----| 句 1 |-+-+-' +-LEADING-+ '-リテラル-1-' '-リテラル-3-' '-FIRST---' 句 1 |--+-BEFORE-+--+---------+--+-ID-4---+--------------------------| '-AFTER--' '-INITIAL-' '-リテラル-2-'
フォーマット 3: TALLYING および REPLACING 句を含む INSPECT ステートメント >>-INSPECT--ID-1--TALLYING--------------------------------------> .-------------------------------------------------------------. | .----------------------------------------------. | | | .---------. | | V V V | | | >----ID-2--FOR----+-CHARACTERS----| 句 1 |-+------------------+-+-+--> | .-------------------------. | | | .---------. | | | V V | | | '-+-ALL-----+----+-ID-3---+----| 句 1 |-+-+-' '-LEADING-' '-リテラル-1-' >--REPLACING----------------------------------------------------> .--------------------------------------------------------------. | .---------. | V V | | >----+-CHARACTERS BY--+-ID-5---+----| 句 1 |-+-------------------+-+->< | '-リテラル-3-' | | .-----------------------------------------. | | | .---------. | | | V V | | | '-+-ALL-----+----+-ID-3---+--BY--+-ID-5---+----| 句 1 |-+-+-' +-LEADING-+ '-リテラル-1-' '-リテラル-3-' '-FIRST---' 句 1 |--+-BEFORE-+--+---------+--+-ID-4---+--------------------------| '-AFTER--' '-INITIAL-' '-リテラル-2-'
フォーマット 4: CONVERTING 句を含む INSPECT ステートメント >>-INSPECT--ID-1--CONVERTING--+-ID-6---+--TO--+-ID-7---+--------> '-リテラル-4-' '-リテラル-5-' .-------------------------------------. V | >----+-BEFORE-+--+---------+--+-ID-4---+-+--------------------->< '-AFTER--' '-INITIAL-' '-リテラル-2-'
ID-1 が USAGE NATIONAL の場合、リテラルは国別カテゴリーでなければなりません。
ID-1 が USAGE DISPLAY-1 の場合、リテラルは DBCS カテゴリーでなければなりません。
ID-1 が USAGE DISPLAY の場合、リテラルは英数字カテゴリーでなければなりません。
ID-1 が USAGE DISPLAY-1 (DBCS) の場合、リテラルは形象定数 SPACE にすることができます。
ID-1 が USAGE DISPLAY または NATIONAL の場合、リテラルは、 形象定数で示すように、ALL というワードで始まらない任意の形象定数にすることができます。この形象定数は、ID-1 が USAGE DISPLAY のときは 1 文字英数字リテラルとして、ID-1 が USAGE NATIONAL のときは 1 文字国別リテラルとして取り扱われます。
すべての ID は (ID-2 を除き)、ID-1 と同じ USAGE である必要があります。すべてのリテラルは、ID-1 が USAGE DISPLAY、 DISPLAY-1、または NATIONAL のときには、それぞれ、英数字、DBCS、または国別のカテゴリーである必要があります。
INSPECT ステートメントのどの ID もウィンドウ表示日付フィールドにはできません。
この句は、特定の文字または特殊文字のデータ項目内でのオカレンスを数えます。
ID-1 が DBCS データ項目の場合は、DBCS 文字が数えられます。ID-1 が USAGE NATIONAL である場合は、国別文字 (エンコード・ユニット) が数えられます。それ以外の場合は、英数字文字 (バイト数) が数えられます。
ID-2 は外部浮動小数点カテゴリーにすることはできません。
INSPECT ステートメントの実行を開始する前に、ID-2 を初期設定しておく必要があります。
使用上の注意: カウント・フィールドは、USAGE NATIONAL を指定して定義された整数データ項目にすることができます。
この句は、データ項目の一部または全部をスペースや 0 のような指定した文字で満たします。
置換対象フィールドと置換文字フィールドは、同じ長さでなければなりません。
CHARACTERS BY を指定しても BEFORE または AFTER 句を指定しないと、 置換フィールドは被検査項目 (ID-1) 内の各文字を置換します。 置換は左端の文字位置から始まり右端へと続きます。
TALLYING 句と REPLACING 句を両方とも指定している場合 (フォーマット 3)、 INSPECT ステートメントの実行は、INSPECT TALLYING ステートメント (フォーマット 1) と そのすぐ後に INSPECT REPLACING ステートメント (フォーマット 2) が続いて指定されている場合と 同様に行われます。
次のような置換文字規則が適用されます。
この句は、カウントする項目または置き換える項目の集合を制限します。
ALL、LEADING、CHARACTERS、FIRST あるいは CONVERTING の各句には、 BEFORE 句と AFTER 句は 1 つしか指定できません。
区切り文字はカウントまたは置換は行われません。
BEFORE および AFTER 句はカウントおよび置換が行われる方法を変更します。
この句は、データ項目 (ID-1) 内にある特定の文字、または文字ストリングをすべて、 ユーザー指定の置換文字に変換します。
リテラル-4 または ID-6 のいずれにも、同じ文字が 2 回以上現れることはできません。
置換する文字ストリング (ID-7 またはリテラル-5) は、 置換される文字ストリング (ID-6 またはリテラル-4) と同じサイズでなければなりません。
フォーマット 4 の INSPECT ステートメントは、同じ ID-1 を指定している ALL 句 (リテラル-4 の各文字ごとに 1 つ) を並べて記述したフォーマット 2 の INSPECT ステートメントであるかのように解釈され実行されます。 その効果は、リテラル-4 の 1 文字が、それぞれリテラル-1 として参照され、 それに対応してリテラル-5 の 1 文字がリテラル-3 として参照された場合と同じです。リテラル-4 の文字とリテラル-5 の文字とは、 データ項目内の順序位置によって対応付けられます。
ID-4、ID-6、または ID-7 が ID-1 と同じストレージ域を占める場合、 このステートメントの実行結果は、たとえそれらが同じデータ記述項目によって定義されている場合であっても、未定義のままです。
以下の表では、INSPECT ステートメントのオペランドとして使用可能なデータ項目の処理方法について説明しています。
| ID-2 以外の ID によって参照される際の各カテゴリーの項目の内容 | 処理 |
|---|---|
| 英数字または英字 | 英数字文字ストリングとして処理される。 |
| DBCS | DBCS 文字ストリングとして処理される。 |
| 国別 | 国別文字ストリングとして処理される。 |
| 英数字編集、USAGE DISPLAY の数字編集、または USAGE DISPLAY の数字 (符号なし、外部 10 進数) | 英数字文字ストリングを参照する INSPECT ステートメントで、英数字カテゴリーとして再定義される。 |
| 国別編集、USAGE NATIONAL の数字編集、または USAGE NATIONAL の数字 (符号なし、外部 10 進数) | 国別文字ストリングを参照する INSPECT ステートメントで、国別カテゴリーとして再定義される。 |
| USAGE DISPLAY の数字 (符号付き、外部 10 進数) | ID と同じ長さで USAGE DISPLAY の符号なし外部 10 進数項目に移動され、英数字文字ストリングを参照する INSPECT ステートメントで、英数字カテゴリーとして再定義される。
記号が区切り文字の場合は、記号の入っているバイトは検査されず、したがって、 その文字の置き換えも行われない。 参照された項目が ID-1 の場合は、置換または変換操作の結果生じたストリングは、ID-1 へコピーされる。 |
| USAGE NATIONAL の数字 (符号付き、外部 10 進数) | ID と同じ長さで USAGE NATIONAL の符号なし外部 10 進数項目に移動され、国別文字ストリングを参照する INSPECT ステートメントで、国別カテゴリーとして再定義される。
記号が区切り文字の場合は、記号の入っているバイトは検査されず、したがって、 その文字の置き換えも行われない。 参照された項目が ID-1 の場合は、置換または変換操作の結果生じたストリングは、ID-1 へコピーされる。 |
| USAGE DISPLAY の外部浮動小数点 | 英数字文字ストリングを参照する INSPECT ステートメントで、英数字カテゴリーとして再定義される。 |
| USAGE NATIONAL の外部浮動小数点 | 国別文字ストリングを参照する INSPECT ステートメントで、国別カテゴリーとして再定義される。 |
BEFORE 句または AFTER 句を指定した場合を除き、検査は被検査項目 (ID-1) の左端の文字位置から始まり、右端まで 1 文字ずつ進められます。
以降の句の被比較数は、INSPECT ステートメントに指定されている順序で、 左から右へ比較されます。
ID が、添え字付けされていたり、参照変更であったり、 または関数 ID である場合、その添え字、参照修飾子、または関数は、 INSPECT ステートメントの実行の中で最初の操作として 1 回だけ評価されます。
TALLYING および REPLACING の例については、「Enterprise COBOL プログラミング・ガイド」を参照してください。
比較の周期は、以下のアクションで構成されます。
CHARACTERS 句を指定する場合、暗黙の 1 文字の被比較数が使用されます。 暗黙の文字は、被検査項目の中の被検査文字と常に一致するものとみなされます。
被検査項目内により多くの文字位置がある場合は、 右端の一致する文字に続く最初の文字位置が、左端の文字位置であるとみなされます。 アクション 1 および 2 で述べた処理が繰り返されます。
BEFORE または AFTER 句が指定されている場合、BEFORE および AFTER 句 (すべてのフォーマット)で説明したとおり、比較の周期は修正されます。