Index
INSPECT

【用途】
文字列の特定の文字までの数をかぞえたり、発生回数をかぞえたりできる命令。
使用頻度は高くないが、知っていると役に立つ場合が多い。

【使用例】
ごめんなさい。ちょっと例を挙げるのが難しいんで、下の解説で理解して下さい。ヒマになったら書きます。

INSPECT文


機能

INSPECT(文字列検査)又は,データ項目中の文字や文字列の出現回数を数えたり,それらを他の文字や文字列で置き換えたりする.


一般形式

【書き方1】
Image

【書き方2】
Image

【書き方3】
Image

【書き方4】
Image


構文規則

  [書き方1,書き方2,書き方3及び書き方4]
  
(1)

一意名-1は,集団項目又は用途が明に又は暗に表示用と記述された基本項目でなければならない.

(2)

一意名-3から一意名-7までの一意名は,集団項目又は用途が明に又は暗に表示用と記述された基本項目でなければならない.

(3)

各定数は,文字定数又は日本語定数でなければならない.定数は,語ALLで始まる表意定数であってはならない.定数-1,定数-2又は定数-4が表意定数のとき,暗に一字のデータ項目が参照されているものとする.

(4)

一つのALL指定,LEADING指定,CHARACTER指定,FIRST指定,及びCONVERTING指定には,一つのBEFORE指定と一つのAFTER指定しか書けない.

(5)

一意名-1が日本語項目又は日本語編集項目のとき,一意名-2を除くすべての一意名は日本語項目又は日本語編集項目でなければならず,またすべての定数は日本語定数でなければならない.

(6)

一意名-1が日本語項目でも日本語編集項目でもないとき,すべての一意名は,日本語項目又は日本語編集項目であってはならず,またすべての定数は日本語定数であってはならない.

  [書き方1及び書き方3]
  
(7)

一意名-2は,数字項目でなければならない.

  [書き方2及び書き方3]
  
(8)

定数-3又は一意名-5のデータ項目の文字数は,定数-1又は一意名-3のデータ項目の文字数と同じでなければならない.定数-3に表意定数を書くと,表意定数の文字数は,定数-1や一意名-3のデータ項目の文字数に等しいものとみなされる.

(9)

CHARACTERS(文字)指定を書く場合,定数-3又は一意名-5のデータ項目の文字数は,1字でなければならない.

  [書き方4]
  
(10)

定数-5又は一意名-7のデータ項目の文字数は,定数-4又は一意名-6のデータ項目の文字数と同じでなければならない.定数-5に表意定数を書くと,表意定数の文字数は,定数-4又は一意名-6のデータ項目の文字数に等しいものとみなされる.

(11)

同じ文字が,定数-4又は一意名-6のデータ項目に2度以上現れてはならない.


一般規則

  [書き方1,書き方2,書き方3及び書き方4]
  
(1)

文字列検査(これには,比較の周期,BEFORE(前)指定やAFTER(後)指定の範囲及び計算や置換の機構の指定を含む)は,その字類とは無関係に,一意名-1のデータ項目の最左端の文字位置から始まり,一般規則(5)から(7)までの条件に従って,左から右へ最右端の文字位置まで進む.

(2)

INSPECT文中の一意名-1,一意名-3,一意名-4,一意名-5,一意名-6又は一意名-7のデー夕項目の内容は,次による.
(a)

一意名-1,一意名-3,一意名-4,一意名-5,一意名-6又は一意名-7のいずれかが英数字項目,英字項目又は日本語項目のとき,これらの一意名のデータ項目の内容は,文字列とみなされる.

(b)

一意名-1,一意名-3,一意名-4,一意名-5,一意名-6又は一意名-7のいずれかが英数字編集項目,数字編集項目,符号なし数字項目又は外部ブール項目の再定義され,その再定義したとき,これらの一意名は英数字項目によって英数字項目を使ってINSPECT文が書いてあるかのようにみなされ,(a)が適用される.
一意名-1,一意名-3,一意名-4,一意名-5,一意名-6又は一意名-7のいずれかが日本語編集項目のとき,これらの一意名は日本語項目によって再定義され,その再定義した日本語項目を使って INSPECT 文が書いてあるかのようにみなされ,(a)が適用される.

(c)

一意名-1,一意名-3,一意名-4,一意名-5,一意名-6又は一意名-7のいずれかが符号付き数字項目のとき,符号部分を除いたその符号付き数字項目の長さと等しい長さを持つ符号なし数字項目に転記されたかのようにみなされ,(b)が適用される.
一意名-1が符号付き数字項目の場合,元の符号の値は,INSPECT文の完了時まで保存されている.

(3)

一般規則(5)〜(17)において,定数-1,定数-2,定数-3,定数-4及び定数-5に関する規則は,それぞれ一意名-3,一意名-4,一意名-5,一意名-6及び一意名-7にも適用する.

(4)

一意名に関する添字及び部分参照子は,INSPECT文の実行の最初に1回だけ評価される.

  [書き方1及び書き方2]
  
(5)

文字列検査は,一意名-1のデータ項目の内容を検査し,定数-1の出現回数を数え(書き方1),定数-1と一致する文字列を定数-3に置き換える(書き方2).

(6)

定数-1の出現回数を数えたり,定数-1と置き換えたりする文字列を決定するための比較操作は,次による.
(a)

TALLYING(計数)指定とREPLACING(置換)指定の作用対象の順序は,INSPECT文で左から右に書かれた順序による.最初の定数-1が,一意名-1の左端からそれと同じ文字数の文字列と比較される.定数-1と一意名-1のその部分とが一致するのは,それらが1字ずつ比較して等しく,更に次の条件のいずれかを満たす場合とする.
(i)

LEADING指定もFIRST指定も書かれていない.

(ii)

LEADING指定が定数-1に書かれ,定数-1が一般規則(10)〜(13)に従って先頭に現れた.

(iii)

FIRST指定が定数-1に書かれ,定数-1が一般規則(10)〜(13)に従って最初に現れた.

(b)

最初の定数-1の比較で一致しなかった場合,続く定数-1があるときには,比較が繰り返される.そして,一致するか,又は次に比較すべき定数-1がなくなるまで繰り返される.次に続く定数-1がなくなった場合,一意名-1の文字位置のうち,最後の比較の周期において最左端とみなされた文字位置のすぐ右側が,次の比較の周期における最左端文字位置とみなされ,再び定数-1に対し比較の周期が開始される.

(c)

一致した場合には,計算や置換が一般規則(10)〜(13)によって行われる.一意名-1のデータ項目の文字位置のうち,一致した文字の最右端文字のすぐ右側の文字位置が,次の比較における最左端文字位置とみなされ,再び最初の定数-1に対し比較の周期が開始される.

(d)

比較操作が続くのは,一意名-1の最右端文字位置が一致の対象となったか,又は最左端の文字位置とみなされているかのいずれかまでとする.この状態が生ずると,文字列検査は終了する.

(e)

CHARACTERS指定を書くと,定数-1が指定されたかのように(a)〜(d)の比較操作が1文字の暗黙の作用対象に対して行われる.ただし,この暗黙の作用対象の内容と一意名-1のデータ項目の内容との比較は行われない.この場合,この暗黙の作用対象は,一意名-1のデータ項目の内容の,現在の比較の周期における最左端文字と常に一致するものとみなされる.

(7)

一般規則(6)の比較操作は,BEFORE指定やAFTER指定により次のように制限される.
(a)

BEFORE指定もAFTER指定も書かないと,定数-1又はCHARACTERS指定の暗黙の作用対象に対し,一般規則(6)の比較操作が行われる.定数-1又はCHARACTERS指定の暗黙の作用対象が,最初に一意名-1の最左端文字位置との比較の対象になる.

(b)

BEFORE指定を書くと,定数-1又はCHARACTERS指定の暗黙の作用対象が一意名-1のデータ項目の内容と比較されるのは,一意名-1のデータ項目の最左端文字位置から定数-2と一意名-1のデータ項目の内容とが最初に一致する直前までの文字とする.一意名-1の中に定数-2が最初に出現する文字位置は,一般規則(6)で述べた最初の比較操作が行われる前に決められる.比較の周期において,定数-1又はCHARACTERS指定の暗黙の作用対象が比較の対象にならなかった場合,一意名-1のデータ項目の内容と一致しないとみなされる.一意名-1のデータ項目の中に定数-2が出現しなかったときには,BEFORE指定の記述がなかったものとして,定数-1又はCHARACTERS指定の暗黙の作用対象との比較操作が行われる.

(c)

AFTER指定を書くと,定数-1又はCHARACTERS指定の暗黙の作用対象が,一意名-1のデー夕項目の内容と比較されるのは,定数-2と一意名-1との内容が最初に一致した直後の文字から一意名-1のデータ項目の最右端文字までとする.これが,定数-1又はCHARACTERS指定の暗黙の作用対象が,比較操作において最初に適格となる文字位置とする.一意名-1のデータ項目の中に定数-2が最初に出現する文字位置は,一般規則(6)の最初の比較操作が行われる前に決められる.比較の周期において,定数-1又はCHARACTERS指定の暗黙の作用対象が比較の対象にならなかった場合,一意名-1のデータ項目の内容と一致しないとみなされる.一意名-1の中に定数-2が出現しなかったときには,比較操作は行わない.

(8)

必須語ALL及びLEADINGは,次の必須語ALL及びLEADINGが現れるまで,連続する各定数-1に適用される.

  [書き方1]
  
(9)

INSPECT文の実行によって,一意名-2のデータ項目に初期値が設定されることはない.

(10)

出現回数を数えるための規則は,次による.
(a)

ALL(全部)指定では,一意名-1のデータ項目の指定された範囲内で一致した定数-1の出現回数を数え,それを一意名-2のデータ項目に加える.

(b)

LEADING(先行)指定では,一意名-1のデータ項目の指定された範囲内の最左端位置で一致が起こり,その一致が起こったとき及び以後一致が続く間の定数-1の出現回数を数え,それを一意名-2のデータ項目に加える.

(c)

CHARACTERS(文字)指定では,一意名-1のデータ項目中の指定された範囲内の文字数を,一般規則(6)(e)により数え,それを一意名-2のデータ項目に加える.

(11)

一意名-1,一意名-3又は一意名-4が,一意名-2と同じ記憶領域を占有するときは,たとえそれらが同じデータ記述項によって定義されていても,この文の実行結果は規定しない.

  [書き方2]
  
(12)

必要語ALL,LEADING及びFIRST(最初)指定は,次にこれらの指定が現れるまで,続くBY指定のそれぞれに適用される.

(13)

置換え規則は,次による.
(a)

CHARACTERS指定では,一意名-1のデータ項目中の指定された範囲内のすべての文字を一般規則(6)(e)により定数-3で置き換える.

(b)

ALL指定では,一意名-1のデータ項目中の指定された範囲内で,定数-1と一致する文字列を,定数-3で置き換える.

(c)

LEADING指定では,一意名-1のデータ項目中の指定された範囲内の最左端文字位置で定数-1と一致が起こり,その一致が起こったとき及び以後一致が続く間の文字列を,定数-3で置き換える.

(d)

FIRST指定では,一意名-1のデータ項目中の指定された範囲内で,定数-1と一致する最初の文字列を定数-3で置き換える.この規則は,定数-1の値と無関係に,各FIRST指定の指定に順に適用する.

(14)

一意名-3,一意名-4又は一意名-5が,一意名-1と同じ記憶領域を占有するときは,たとえそれらが同じデータ記述項によって定義されていても,この文の実行結果は規定しない.

  [書き方3]
  
(15)

書き方3のINSPECT文は,同一の一意名-1に対して二つの連続するINSPECT文を記述したのと同様に解釈され,実行される.すなわち,書き方3のTALLYING指定と同じ書き方1のINSPECT文を記述し,次に書き方3のREPLACING指定と同じ書き方2のINSPECT文を記述したものとみなされる.一致と計算の規則は,書き方1に準じ,一致と置換の規則は,書き方2に準ずる.
書き方2の一意名に関連する添字は,書き方1の実行の前に一度だけ評価される.

  [書き方4]
  
(16)

書き方4のINSPECT文は,同じ一意名-1を指定し,一連のALL指定を持ち,その各々が定数-4の各1文字に対応する書き方2のINSPECT文が書かれているかのように解釈され,実行される.すなわち,書き方2のALL指定の定数-1が書き方4の定数-4の1文字に,書き方2のALL指定の定数-3が書き方4の定数-5の1文字にそれぞれ対応する.定数-4の文字と定数-5の文字との対応は,そのデータ項目中の順序位置による.

(17)

一意名-4,一意名-6又は一意名-7が,一意名-1と同じ記憶領域を占有するときは,たとえそれらが同じデータ記述項によって定義されていても,この文の実行結果は規定しない.以下にINSPECT文(書き方3)の処理の流れの例を示す.

Image

  [計算の処理]
  
   実行前のAN-1の内容:
   

Image

(1)から(6)は,それぞれ1回目から6回目の比較の各周期における最左端の文字位置を示す.

(6)の文字位置でBEFORE指定に指定した“−”と一致する直前まで,計算の処理が行われる.

(1)及び(3)で“F”と一致し,ED-2に1ずつ加算される.

計数の処理の結果,ED-2は次のように更新される.

   実行後のED-2の内容:
   

Image

  [置換の処理]
  
   実行前のAN-1の内容:
   

Image

(1)から(6)は,それぞれ1回目から6回目の比較の各周期における最左端の文字位置を示す.

(1)及び(5)で“FIF”と一致し,その文字位置を“SIX”と置き換える.

置換の処理の結果,AN-1は次のように置き換えられる.

   実行後のAN-1の内容:
   

Image


INSPECT文の例

以下の各INSPECT文の例において,COUNT-nは,その文の実行の直前にゼロであるものとする.最後の例を除き,上に二つのINSPECT文の例を示し,その実行結果をその下に示す.

例1:

Image
 
ITEMの初期値  
              
      COUNT-      
 
   ITEMの終了値   
                  
0 
1 
2 
3 
4 
EFABDBCGABCFGG
3 
1 
1 
0 
5 
TUXYXVWRXYZZPZ    
BABABC        
2 
0 
0 
1 
1 
SXYXYZ            
BBBC          
0 
1 
0 
2 
0 
SSVW              


例2:

Image
ITEMの初期値
COUNT-0 
COUNT-1 
 ITEMの終了値 
     BBB    
    3   
    0   
     ZZZ      
     ABA    
    3   
    0   
     ZZZ      


例3:

Image
 
   ITEMの初期値   
                  
  COUNT-  
 
   ITEMの終了値   
                  
0 
1 
2 
BBEABDABABBCABEE  
3 
0 
2 
BBEXYZXYXYZCABVE  
ADDDDC            
0 
0 
4 
AZZZZC            
ADDDDA            
0 
0 
5 
AZZZZZ            
CDDDDC            
0 
0 
0 
CDDDDC            
BDBBBDB           
0 
3 
0 
BDWWWDB           


例4:

Image
ITEMの初期値
COUNT-0 
 ITEMの終了値 
ABABABABC   
    1   
ABABXYABC     


例5:

Image

上記のINSPECT文は,下記のINSPECT文と等価である.

Image
   ITEMの初期値   
   ITEMの終了値     
AC"AEBDFBCD@AB"D  
 AC"XEYXFYZX@AB"D   


Index