INSPECT 文

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

書き方 1 の一般形式


INSPECT - Format 1

書き方 2 の一般形式


INSPECT - Format 2

書き方 3 の一般形式


INSPECT - Format 3
ANS85 

書き方 4 の一般形式


INSPECT - Format 4
MF 

書き方 5 の一般形式

INSPECT - Format 5

すべての書き方に関する構文規則

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

    MF 集団項目、あるいは

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

    ANS85 英数字編集、数字編集、

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

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

    ANS85 または CONVERTING

    の各指定には、BEFORE 指定

    ANS85 および /;、

    または AFTER 指定を 2 つ以上書くことはできない。

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

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

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

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

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

    ANS85 literal-2 および identifier-4 には、この制限は適用されない。

ANS85 

書き方 4 の構文規則

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

すべての書き方に関する一般規則

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

    ANS85 または関数一意名

    があると、その添え字

    ANS85 または関数一意名

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

書き方 1 の一般規則

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

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

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

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

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

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

書き方 2 の一般規則

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

書き方 3 の一般規則

  1. 書き方 3 の INSPECT 文は、同じ identifier-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 文は、literal-1 の代わりに literal-4 を、literal-3 の代わりに literal-5 を用いたものと解釈される。literal-4 の文字と literal-5 の文字との対応関係は、データ項目内の順序位置によって付けられる。
  2. ANS85 identifier-4、identifier-6、identifier-7 のいずれかが identifier-1 と同じ記憶領域を占めると、INSPECT 文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。

書き方 5 の一般規則

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

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

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

  4. identifier-3、identifier-4、identifier-5、literal-1、literal-2、および literal-3 は、1 文字の項目である必要がある。

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