INSPECT (文字列検査) 文

INSPECT (文字列検査) 文は、文字の数を数えたり (書き方 1)、置き換えたり (書き方 2)、数を数えて置き換えたり (書き方 3)、変換したり (書き方 4)、後続の数を数えたりする (書き方 5)。

書き方 1 の一般形式


INSPECT - 形式 1

書き方 2 の一般形式


INSPECT - 形式 2

書き方 3 の一般形式


INSPECT - 形式 3
ANS85 

書き方 4 の一般形式


INSPECT - 形式 4
MF 

書き方 5 の一般形式

INSPECT - 形式 5

すべての書き方の構文規則

  1. 一意名-1 は、集団項目、あるいは明示的または暗黙的に USAGE IS DISPLAY と記述された基本項目とする。
  2. 一意名-3 から一意名-n までの一意名は、

    MF 集団項目、あるいは

    明示的または暗黙的に USAGE IS DISPLAY と記述された英字、英数字、

    英数字編集、数字編集

    または数字の基本項目とする。

  3. 各リテラルは、文字リテラルまたは表意定数とする。ただし ALL は使用できない。定数-1、定数-2、定数-4 が表意定数の場合は、暗黙的に 1 文字のデータ項目を表わす。
  4. BEFORE 指定、

    ANS85 または

    あるいはその両方は、AFTER 指定を複数書くことはできない (ALL、LEADING、 CHARACTERS、FIRST

    ANS85 または CONVERTING

    指定の場合)。

  5. 定数-1、定数-2、定数-3、定数-4、定数-5 および一意名-3、一意名-4、一意名-5、一意名-6、一意名-7 のデータ項目の長さは、リテラルまたはデータ項目が取る限度内ならば、何文字でもよい。
  6. MF 一意名-2 (TALLYING 項目) を除くすべての一意名は、外部浮動小数点数であってもよい。英数字項目を参照する INSPECT 文に関しては、外部浮動小数点項目は英数字に再定義されているように扱われる。

書き方 1 および 3 の構文規則

  1. 一意名-2 は、基本数値データ項目とする。

書き方 2 および 3 の構文規則

  1. 定数-3 または一意名-5 のデータの大きさは、定数-1 または一意名-3 のデータの大きさと等しくする。定数-3 に表意定数を指定すると、その大きさは、定数-1 または一意名-3 のデータ項目の大きさに等しく扱われる。
  2. CHARACTERS 指定を行う場合、定数-3 または一意名-5 のデータ項目の大きさは 1 文字にする。

    ANS85 定数-2 および一意名-4 には、この制限は適用されない。

ANS85 

書き方 4 の構文規則

  1. ANS85 定数-5 または一意名-7 のデータ項目の大きさは、定数-4 または一意名-6 のデータ項目の大きさと等しくする。定数-5 に表意定数を指定すると、その大きさは、定数-4 または一意名-6 のデータ項目の大きさに等しく扱われる。
  2. ANS85 定数-4 または一意名-6 のデータ項目中に、同じ文字が 2 回以上現れてはならない。

すべての書き方の一般規則

  1. ANS85 長さを判定する目的では、一意名-1は送り出し側データ項目であるかのように扱われる。(「OCCURS 句」のトピックを参照)。
  2. 文字列検査を行うためには、比較の周期、BEFORE 指定や AFTER 指定の範囲の設定、計数または置換、あるいはその両方の機構などが必要である。これらの設定を含めて、文字列検査は一意名-1 のデータ項目の左端の文字位置から開始され、左から右へ、右端の文字位置に達するまで進められる。この文字列検査の進め方には、字類による違いはない。具体的には、下記の一般規則 11、12、13 に説明する。
  3. INSPECT 文の中で使用するデータ項目の一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7 の内容は、下記のように扱われる。
    1. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7 のいずれかが英数字と記述されているならば、これらの各一意名の内容は文字列として扱われる。
    2. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7 のいずれかが英数字編集か数字編集か符号なし数値項目と記述されているならば、これらの各一意名は英数字に再定義されているように扱われる (一般規則 3a を参照)。INSPECT 文は、再定義されたデータ項目を参照するように書かれる。
    3. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7 のいずれかが符号付き数値と記述されているならば、データ項目は符号部分を除いたその符号付き数値項目と長さの等しい符号なし数値データ項目に転記されたように扱われる。そして、その結果に対して上記の一般規則 3b が適用される(「MOVE (転記) 文」のトピックを参照)。
  4. 一般規則 6 から 19 において、定数-1、定数-2、定数-3、定数-4、定数-5 に関する規則は、それぞれ、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7 のデータ項目の内容にも同様に当てはまる。
  5. 一意名の中に添字付きのもの

    ANS85 または関数一意名

    があると、その添字

    ANS85 または関数一意名

    は、INSPECT文の実行の最初に1回だけ評価される。

書き方 1 の一般規則

  1. ANS85 一意名-1は、送り出し側データ項目である。
  2. 必要語の ALL および LEADING は、後続の各定数-1 にかかる形容詞である。その効力の範囲は、次の形容詞が出てくるまでである。
  3. 一意名-2 のデータ項目の内容は、INSPECT 文を実行することによって初期化されることはない。
  4. 計数に関する規則は、下記のとおり。
    1. ALL 指定を書くと、一意名-1 の中に定数-1 が出現する回数が一意名-2 に加えられる。
    2. LEADING 指定を書くと、一意名-1 の中に定数-1 が最初に出現して以降連続して出現する回数が一意名-2 に加えられる。ただし、一意名-1 の中に定数-1 が最初に出現する場所は、定数-1 が比較の対象となる最初の比較周期が始まる点とする。
    3. CHARACTERS 指定を書くと、一意名-1 の中にその文字が出現する回数が一意名-2 に加えられる。その数え方は書き方 1 および 2 の一般規則 12e に従う。
  5. 一意名-1、一意名-3、一意名-4 のいずれかが一意名-2 と同じ記憶領域を占めると、INSPECT 文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない(「作用対象の重なり」のトピックを参照)。

書き方 1 および 2 の一般規則

  1. 一意名-1 のデータ項目の内容を文字列検査する間、その中に定数-1 が出現するたびに、計数 (書き方 1 の場合) または定数-3 による置換 (書き方 2 の場合) が行われる。
  2. 計数または置換するために定数-1 の出現を調べる比較は、下記のように行われる。
    1. TALLYING 指定または REPLACING 指定の作用対象は、INSPECT 文中に書かれた順に左から右に取り上げられる。一意名-1 のデータ項目の左端の文字位置から開始して、最初の定数-1 が、一意名-1 中の等しい文字数と比較される。両者を 1 文字ずつ比較した結果が等しく、さらに下記の条件のいずれかを満たす場合、定数-1 と一意名-1 中の該当部分とは等しいと判定される。
      1. LEADING 指定も FIRST 指定も書かれていない。
      2. 定数-1 に形容詞 LEADING がかかっている場合、一般規則 9 および 15 に照らして、定数-1 は先頭に現れている。
      3. 定数-1 に形容詞 FIRST がかかっている場合、一般規則 9 に照らして、定数-1 は最初に現れている。
    2. 最初の定数-1 が一意名-1 中の比較対象部分と一致しないと、後続の定数-1 が存在すれば、そのそれぞれについて比較が繰り返される。この比較は、両者が一致するか、後続の定数-1 がなくなるまで続けられる。後続の定数-1 がない場合には、一意名-1 のデータ項目の文字位置のうちで、前回の比較周期で取り上げられた部分のすぐ右隣の部分が、次回の比較周期での比較対象部分として取り上げられる。そして、最初の定数-1 との比較が繰り返される。
    3. 比較結果が一致すると、一般規則 9 および 15 に説明してあるように、計数または置換、あるいはその両方が行われる。すると今度は、一意名-1 のデータ項目中の現在比較の対象となった部分の右端の文字位置のすぐ右隣の部分が、次回の比較周期での比較対象部分として取り上げられる。そして、最初の定数-1 との比較が繰り返される。
    4. この比較処理は、一意名-1 のデータ項目中の右端の文字位置が比較の対象として取り上げられるか、または比較部分の左端の文字位置とみなされるまで続けられる。この状態に達すると、文字列検査は終了する。
    5. CHARACTERS 指定を書くと、定数-1 に文字を 1 つ暗黙に指定したものとして、上記の 12a から 12d に記述した比較処理が行われる。ただし、一意名-1 のデータ項目の内容との比較は実際には行われない。この場合、暗黙の定数-1 は現在の比較周期において、一意名-1 のデータ項目の内容の比較対象部分の左端文字位置と常に一致するものとみなされる。
  3. 一般規則 12 に定義した比較処理は、BEFORE 指定および AFTER 指定の影響を受ける。その様子は下記のとおり。
    1. BEFORE 指定も AFTER 指定も書かないと、定数-1 または CHARACTERS 指定の暗黙の作用対象が一意名-1 と比較される開始点は、一意名-1 の左端の文字位置からとなる。
    2. BEFORE 指定を書くと、定数-1 または CHARACTERS 指定の暗黙の作用対象と比較される一意名-1 のデータ項目の内容の範囲は、その左端の文字位置から定数-2 が最初に出現するまで (定数-2 を含まない) となる。

      定数-2 が最初に出現する位置は、一般規則 12 に記述した比較処理の最初の周期が始まる前に判定される。いずれかの比較周期において、定数-1 または CHARACTERS 指定の暗黙の作用対象が比較の対象とならない場合は、一意名-1 のデータ項目の内容と一致しないものとみなされる。一意名-1 のデータ項目の中に定数-2 が出てこなかった場合は、定数-1 または CHARACTERS 指定の暗黙の作用対象は、BEFORE 指定がなかったのと同様に比較処理の対象とされる。

    3. AFTER 指定を書くと、定数-1 または CHARACTERS 指定の暗黙の作用対象と比較される一意名-1 のデータ項目の内容の範囲は、最初に出現する定数-2 の右端のすぐ右の文字位置から末尾までとなる。

      定数-2 が最初に出現する位置は、一般規則 12 に記述した比較処理の最初の周期が始まる前に判定される。いずれかの比較周期において、定数-1 または CHARACTERS 指定の暗黙の作用対象が比較の対象とならない場合は、一意名-1 のデータ項目の内容と一致しないものとみなされる。一意名-1 のデータ項目の中に定数-2 が出てこなかった場合は、定数-1 または CHARACTERS 指定の暗黙の作用対象は、まったく比較処理の対象とならない。

書き方 2 の一般規則

  1. 必要語の ALL、LEADING、および FIRST は、後続の各 BY 指定にかかる形容詞である。その効力の範囲は、次の形容詞が出てくるまでである。
  2. 置換に関する規則は、下記のとおり。
    1. CHARACTERS 指定を書くと、一意名-1 のデータ項目の中で書き方 1 および 2 の一般規則 12e に照らして一致する各文字が、定数-3 で置き換えられる。
    2. ALL 指定を書くと、一意名-1 のデータ項目の中の定数-1 に一致する各文字が、定数-3 で置き換えられる。
    3. LEADING 指定を書くと、一意名-1 のデータ項目の中の定数-1 に一致する最初以降の連続する各文字が、定数-3 で置き換えられる。ただし、一意名-1 の中に定数-1 が最初に出現する場所は、定数-1 が比較の対象となる最初の比較周期が始まる点とする。
    4. FIRST 指定を書くと、一意名-1 のデータ項目の中の定数-1 に一致する左端の文字が、定数-3 で置き換えられる。
  3. 一意名-3、一意名-4、一意名-5 のいずれかが一意名-1 と同じ記憶領域を占めると、INSPECT 文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない(「作用対象の重なり」のトピックを参照)。

書き方 3 の一般規則

  1. 書き方 3 の INSPECT 文は、同じ一意名-1 に対して、書き方 1 の TALLYING 指定と書き方 2 の REPLACING 指定を 2 つ続けて書いたものとして解釈され実行される。書き方 1 の INSPECT 文の比較照合と計数に関する一般規則、および書き方 2 の INSPECT 文の比較照合と置換に関する一般規則が、書き方 3 にも当てはまる。
ANS85 

書き方 4 の一般規則

  1. ANS85 書き方 4 の INSPECT 文は、literal-4 に含まれる各文字に関して 1 つずつ、同じ identifier-1 に対して ALL 指定をした、書き方 2 の INSPECT 文を続けて書いたものとして解釈され実行される。これらの ALL 指定をした個々の仮想の INSPECT 文は、定数-1 の代わりに定数-4 を、定数-3 の代わりに定数-5 を用いたものと解釈される。定数-4 の文字と定数-5 の文字との対応関係は、データ項目内の順序位置によって付けられる。
  2. ANS85 一意名-4、一意名-6、一意名-7 のいずれかが一意名-1 と同じ記憶領域を占めると、INSPECT 文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。

書き方 5 の一般規則

  1. TRAILING は MF 拡張機能で、ソース データ項目の最も右側での発生、または一連の連続した発生を見つけるために使用されます。

  2. TRAILING の発生が見つかった場合、ソース データ項目の右から左へのスキャンを行い、連続した発生を探します。

  3. REPLACING オプションを使用すると、すべての連続した発生を置き換えることができます。

  4. 一意名-3、一意名-4、一意名-5、定数-1、定数-2、および定数-3 は、1 文字の項目である必要があります。

  1. INSPECT TALLYING、REPLACING、および CONVERTING の使用例については、「INSPECT 文 (計数、置換、変換)」のトピックを参照してください。