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