INSPECT(文字列検査)文

INSPECT(文字列検査)文は、データ項目内に出てくる単一の文字または一連の文字の数を数えたり(形式 1)、置き換えたり(形式 2)、数を数えて置き換えたり(形式 3)、

または、変換(形式 4)する。

  1. INSPECT TALLYING、REPLACING、CONVERTING の使用例は、言語リファレンス - 追加トピックINSPECT文(カウント、置換、および変換)節を参照。

一般形式

形式 1

形式 2

形式 3

形式 4

構文規則

すべての形式
  1. 一意名-1は、集団項目、あるいは明示的または暗黙的にUSAGE IS DISPLAYと記述された基本項目とする。

  2. 一意名-3から一意名-n までの一意名は、

    集団項目、あるいは

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

    英数字編集、数字編集、

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

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

  4. ALL、LEADING、CHARACTERS、FIRST、

    またはCONVERTING

    の各指定には、 BEFORE 指定、

    および /、

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

  5. 定数-1、定数-2、定数-3、定数-4、定数-5および一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のデータ項目の長さは、定数またはデータ項目が取る限度内ならば、何文字でもよい。

  6. 一意名-2(TALLYING項目)を除くすべての一意名は、外部浮動小数点数であってもよい。英数字項目を参照するINSPECT文に関しては、外部浮動小数点項目は英数字に再定義されているように扱われる。
形式 1 および 3
  1. 一意名-2は、基本数字データ項目とする。

形式 2 および 3
  1. 定数-3または一意名-5のデータの大きさは、定数-1または一意名-3のデータの大きさと等しくする。定数-3に表意定数を指定すると、その大きさは、定数-1または一意名-3のデータ項目の大きさに等しく扱われる。

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

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

形式 4
  1. 定数-5または一意名-7のデータの大きさは、定数-4または一意名-6のデータの大きさと等しくする。定数-5に表意定数を指定すると、その大きさは、定数-4または一意名-6のデータ項目の大きさに等しく扱われる。

  2. 定数-4または一意名-6のデータ項目中に、同じ文字が2回以上現れてはならない。

一般規則

すべての形式
  1. 長さを判定する目的では、一意名-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が適用される。(手続き部 - MERGE - OPENの章のMOVE(転記)文節を参照。)

  4. 一般規則6から19において、定数-1、定数-2、定数-3、定数-4、定数-5に関する規則は、それぞれ、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のデータ項目の内容にも同様に当てはまる。

  5. 一意名の中に添字付きのもの

    または関数一意名

    があると、その添字

    または関数一意名

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

形式 1
  1. 一意名-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のデータ項目の内容と一致しないものとみなされる。一意名-2のデータ項目の中に定数-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 にも当てはまる。

形式 4
  1. 形式 4 のINSPECT文は、定数-4に含まれる各文字に関して1つずつ、同じ一意名-1に対してALL指定をした、形式 2 のINSPECT文を続けて書いたものとして解釈され実行される。これらのALL指定をした個々の仮想のINSPECT文は、定数-1の代わりに定数-4を、定数-3の代わりに定数-5を用いたものと解釈される。定数-4の文字と定数-5の文字との対応関係は、データ項目内の順序位置によって付けられる。

  2. 一意名-4、一意名-6、一意名-7のどれかが一意名-1と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。