Index
UNSTRING

【用途】
データ項目を分解し別のデータ項目へ転送する。STRINGの反対の命令語。結構便利。

【使用例】
・これもチョット文章で書くのは上手くいかなそう。構文の例題を参照すれば理解できますか?こんな説明じゃダメですか?

UNSTRING文


機能

UNSTRING(分解)文は,送出し側中の連続したデータを分解し,幾つかの受取り側に入れる.


一般形式

【書き方】
Image


構文規則

(1)

定数-1及び定数-2は,文字定数,日本語定数又は語ALLで始まらない表意定数でなければならない.

(2)

一意名-1,一意名-2,一意名-3及び一意名-5は,明に又は暗に項類が英数字,日本語又は日本語編集のデータ項目として記述されていなければならない.

(3)

一意名-4は,明に又は暗に用途が表示用として記述された次のいずれかの項類でなければならない.
(a)

英字

(b)

英数字

(c)

PICTURE句の文字列中に“P”を含まない数字

(d)

日本語

(4)

一意名-6及び一意名-8は,PICTURE句の文字列中に“P”を含まない整数項目でなければならない.

(5)

一意名-7は,整数項目であり,一意名-1のデータ項目の文字数に1を加えた値をもつことができなければならず,かつ一意名-7のPICTURE句の文字列中に文字“P”を含んでいてはならない.

(6)

DELIMITER IN(区切り文字)指定とCOUNT IN(文字計数)指定は,DELIMITED BY(区切り)指定を書いたときにだけ指定できる.

(7)

一意名-1は,部分参照してはならない.

(8)

一意名-1,一意名-2,一意名-3,一意名-4,一意名-5,定数-1又は定数-2のいずれかの項類が日本語又は日本語編集のとき,これらすべての項類は日本語又は日本語編集の基本項目でなければならない.


一般規則

(1)

一意名-2及び定数-1についての規則は,一意名-3及び定数-2とそれらの繰返しに,それぞれ適用される.

(2)

一意名-1のデータ項目は,送出し側を表す.

(3)

一意名-4のデータ項目は,データの受取り側を表す.一意名-5のデータ項目は区切り文字の受取り側を表す.

(4)

定数-1又は一意名-2のデータ項目は,区切り文字を指定する.

(5)

一意名-6のデータ項目は,一意名-1のデータ項目のうち,区切り文字で区切られて,一意名-4のデータ項目へ転送された文字の個数を表す.区切り文字の文字数は,この値に含まれない.

(6)

一意名-7のデータ項目の値は,一意名-1の領域中の文字位置を表す.

(7)

一意名-8のデータ項目は,UNSTRING文の実行で作用を受けた一意名-4のデータ項目の一つにつき1ずつ増加するカウンタとする.

(8)

区切り文字に表意定数を用いると,1字の文字定数とみなされる.
ALL(連続)指定を書くと,定数-1又は一意名-2のデータ項目の内容の,1回以上の連続した繰返しが一意名-1の文字列中に現れても,それが1回の繰返しとして扱われる.そして,定数-1又は一意名-2のデータ項目の1回の繰返しが一般規則(13)(d)に従って受取り側に入れられる.

(9)

検査中に,二つの連続した区切り文字が検出されると,現在の受取り側は,その受取り側のデータ記述に従って,英字,英数字又は日本語ならば空白,数字ならばゼロで満たされる.

(10)

定数-1又は一意名-2のデータ項目の内容は,計算機文字集合中の任意の文字を含むことができる.

(11)

定数-1又は一意名-2のデータ項目の区切り文字が複数個の文字からなるとき,区切り文字とみなされるのは,送出し側にこれらの文字全部が連続して,同じ順序で現れるときだけとする.

(12)

二つ以上の区切り文字をDELIMITED BY(区切り)指定に書くと,それらの間には論理和条件が成り立つ.それぞれの区切り記号は送出し側と比較され,一致すれば,送出し側中の文字は単一の区切り文字とみなされる.送出し側中のどの文字も二つ以上の区切り文字の一部とみなされることはない.
それぞれの区切り文字は,UNSTRING文で指定された順序で送出し側に適用される.

(13)

UNSTRING文が開始されたとき,現在の受取り側は一意名-4のデータ項目とする.データは,一意名-1のデータ項目から一意名-4のデータ項目に,次の規則に従って転送される.
(a)

POINTER(文字位置)指定を書くと,一意名-1の文字列は,一意名-7のデータ項目の内容で示される文字位置から検査される.POINTER指定を書かないと,文字列は最左端の文字位置から検査される.

(b)

DELIMITED BY指定を書くと,検査は左から右へ,定数-1又は一意名-2のデータ項目の値で指定された区切り文字を検出するまで進められる(一般規則(11)参照).DELIMITED BY指定を書かないと,検査される文字数は現在の受取り側の文字数に等しい.ただし,受取り側項目の演算符号が独立した文字位置を占めると定義されているときには,検査される文字数は現在の受取り側の文字数よりも1だけ小さくなる.
受取り側項目が小数点をもつときは,整数部と小数部のけた数の合計が検査される文字数となる.
区切り文字が検出される前に,一意名-1のデータ項目の終わりに達すると,最後の文字を調べて検査を終了する.

(c)

このようにして検査された文字(区切り文字は除く)は,英数字項目又は日本語項目として扱われ,MOVE(転記)文の規則に従って現在の受取り側に転記される.

(d)

DELIMITER IN指定を書くと,区切り文字は英数字項目又は日本語項目として扱われ,MOVE文の規則に従って一意名-5のデータ項目に転記される.区切りの条件が一意名-1のデータ項目の終わりならば,一意名-5のデータ項目は空白で満たされる.

(e)

COUNT IN指定を書くと,このようにして検査された文字(区切り文字は除く)の個数が,基本項目転記の規則に従って一意名-6のデータ項目に転記される.

(f)

DELIMITED BY指定を書くと,文字列は区切り文字のすぐ右の文字から更に検査される.
この指定を書かないと,文字列は転送された最後の文字のすぐ右の文字から更に検査される.

(g)

データが一意名-4のデータ項目に転送された後,次の一意名-4の繰返しのデータ項目が現在の受取り側となる.(b)〜(f)の動作は,一意名-1のデータ項目のすべての文字がなくなるか,又は受取り側項目がなくなるまで,繰り返される.

(14)

POINTER指定及びTALLYING(分解計数)指定のデータ項目の初期値は,利用者が設定しておかなければならない.

(15)

一意名-7のデータ項目の内容は,一意名-1のデータ項目中の文字が1文字調べられるごとに1ずつ増加する.POINTER指定付きのUNSTRING文の実行が終了すると,一意名-7のデータ項目の内容は,その初期値に,一意名-1のデータ項目中の検査された文字数を加えた値になる.

(16)

TALLYING指定付きのUNSTRING文の実行が終了すると,一意名-8のデータ項目の内容は,UNSTRING文の実行開始時の値に,UNSTRING文の実行中に作用を受けた各受取り側項目の一意名-4の個数を加えた値になる.

(17)

次のいずれかの場合には,あふれ条件が生ずる.
(a)

UNSTRING文の開始時に,一意名-7のデータ項目の値が1より小さいか,又は一意名-1のデータ項目の文字数より大きいとき

(b)

UNSTRING文の実行中,すべての受取り側が使われたのに,一意名-1のデータ項目中にまだ検査されていない文字が残っているとき

(18)

あふれ条件が生ずると,UNSTRING文の動作は終了し,NOT ON OVERFLOW指定が書かれていても無視され,制御は,UNSTRING文の終わり,又はON OVERFLOW指定が書かれていれば無条件文-1に移る.制御が無条件文-1に移った場合,無条件文-1中に指定された各文の規則に従って実行が続けられる.制御の明示移行を起こす手続き分岐文又は条件文が実行されると,その文に従って制御は移る.そうでなければ,無条件文-1の実行を完了し,制御はUNSTRING文の終わりに移る.

(19)

END-UNSTRING指定は,UNSTRING文の範囲を区切る.

(20)

UNSTRING文の実行時に,一般規則(17)の条件が起こらなかったとき,他の一般規則に従ってデータを移し終った後で,ON OVERFLOW指定が書かれていても無視され,制御は,UNSTRING文の終わり,又はNOT ON OVERFLOW指定が書かれていれば無条件文-2に移る.制御が無条件文-2に移った場合,無条件文-2中に指定された各文の規則に従って実行が続けられる.制御の明示移行を起こす手続き分岐文又は条件文が実行されると,その文の規則に従って制御は移る.そうでなければ,無条件文の実行を完了し,制御はUNSTRING文の終わりに移る.

(21)

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

以下にUNSTRING文の処理の流れの例を示す.

Image

送出し側項目(AN-SND)から受取り側項目(AN-R1,AN-R2,AN-R3,AN-R4)へ転記される文字位置を以下に示す.

実行前のAN-SNDの内容:

Image

(1)はAN-R1へ転記される左端の文字位置を示す.これは,POINTER指定で記述したED-PTRの初期値が示す文字位置である.AN-R1へは,区切り文字(この場合は“#”)が現れるまでの3字を転記する.


実行後のAN-R1の内容:

Image

区切り文字は,DELIMITER IN指定の記述がないので転記されない.

(2)は,AN-R2へ転記される左端の文字位置を示す.AN-R2へは,区切り文字(“#”に対してALL指定の記述があるので“#”の繰返しである“##”)が現れるまでの3字が転記される.


実行後のAN-R2の内容:

Image

区切り文字の繰返しの1回分が,AN-D2に転記される.


実行後のAN-D2の内容:

Image

(3)は,AN-R3へ転記される左端の文字位置を示す.AN-R3へは,区切り文字(この場合は“*”)が現れるまでの3字を転記する.


実行後のAN-R3の内容:

Image

区切り文字は,DELIMITER IN指定の記述がないので転記されない.また,COUNT IN指定の記述があるので,検査された文字の個数(この場合は3)がED-C3に転記される.


実行後のED-C3の内容:

Image

(4)は,AN-R4へ転記される左端の文字位置を示す.AN-R4へは,区切り文字(この場合は“*”)が最初の文字位置に現れるため空白を転記する.


実行後のAN-R4の内容:

Image

区切り文字は,AN-D4に転記される.また,COUNT IN指定の記述があるので,検査された文字の個数(この場合は0)がED-C4に転記される.


実行後のAN-D4の内容:

Image


実行後のED-C4の内容:

Image

(5)は,このUNSTRING文の実行後,POINTER指定で記述したED-PTRの値が示す文字位置である.したがって,AN-SND中にまだ検査されていない文字が残っているためにあふれ条件が生じて手続き名OVERFLOW-PROCに制御が移る.


実行後のED-PTRの内容:

Image

また,TALLYING指定で書かれたED-TLYの値は,動作が行われた受取り側項目の個数(この場合は4)を加えた値となる.


実行後のED-TLYの内容:

Image


UNSTRING文の例

次のようなデータ部の記述がある.

Image

ここで各項目には,次の初期値が与えられている.

Image

備考._ は空白を表す.
一意名
      一意名の結果      
RCV-1 
_ _ _ _ _ _ _ _ _ _     
RCV-2 
_ _ _ _ _ _ _ _ _ _     
RCV-3 
_ _ _ _ _ _ _ _ _ _     
DEL-1 
_ _                     
DEL-2 
_ _                     
DEL-3 
_ _                     
CTR-1 
0 0                     
CTR-2 
0 0                     
CTR-3 
0 0                     
PTR-A 
0 1                     
TALL-A
0 0                     



以下にUNSTRING文の記述例と,上記の初期値に基づくその実行結果を示す.
(1)

UNSTRING SEND-A

Image
一意名
      一意名の結果      
RCV-1 
M U N I C H / N E W     
RCV-2 
_ Y O R K / / T O K     
RCV-3 
Y O * * * * * * * *     
PTR-A 
3 1                     



(2)

UNSTRING SEND-A

Image
一意名
      一意名の結果      
RCV-1 
M U N I C H _ _ _ _     
RCV-2 
N E W _ Y O R K _ _     
RCV-3 
_ _ _ _ _ _ _ _ _ _     
CTR-1 
0 6                     
CTR-2 
0 8                     
CTR-3 
0 0                     
PTR-A 
1 8                     
TALL-A
0 3                     




この例では,すべての受取り側が使われたのにもかかわらず,SEND-Aにはまだ検査されていない文字が残っている.したがって,もしこの例のUNSTRING文にON OVERFLOW指定が書いてあると,指定された無条件文を実行する.
(3)

UNSTRING SEND-A

Image
一意名
      一意名の結果      
RCV-1 
M U N I C H _ _ _ _     
RCV-2 
N E W _ Y O R K _ _     
RCV-3 
T O K Y O _ _ _ _ _     
DEL-1 
/ _                     
DEL-2 
/ _                     
DEL-3 
* _                     
CTR-1 
0 6                     
CTR-2 
0 8                     
CTR-3 
0 5                     
PTR-A 
3 1                     
TALL-A
0 3                     




Index