UNSTRING(分解)文は,送出し側中の連続したデータを分解し,幾つかの受取り側に入れる.
【書き方】
(1) | 定数-1及び定数-2は,文字定数,日本語定数又は語ALLで始まらない表意定数でなければならない. |
||||||||
(2) | 一意名-1,一意名-2,一意名-3及び一意名-5は,明に又は暗に項類が英数字,日本語又は日本語編集のデータ項目として記述されていなければならない. |
||||||||
(3) | 一意名-4は,明に又は暗に用途が表示用として記述された次のいずれかの項類でなければならない.
|
||||||||
(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字の文字定数とみなされる.
|
||||||||||||||
(9) | 検査中に,二つの連続した区切り文字が検出されると,現在の受取り側は,その受取り側のデータ記述に従って,英字,英数字又は日本語ならば空白,数字ならばゼロで満たされる. |
||||||||||||||
(10) | 定数-1又は一意名-2のデータ項目の内容は,計算機文字集合中の任意の文字を含むことができる. |
||||||||||||||
(11) | 定数-1又は一意名-2のデータ項目の区切り文字が複数個の文字からなるとき,区切り文字とみなされるのは,送出し側にこれらの文字全部が連続して,同じ順序で現れるときだけとする. |
||||||||||||||
(12) | 二つ以上の区切り文字をDELIMITED BY(区切り)指定に書くと,それらの間には論理和条件が成り立つ.それぞれの区切り記号は送出し側と比較され,一致すれば,送出し側中の文字は単一の区切り文字とみなされる.送出し側中のどの文字も二つ以上の区切り文字の一部とみなされることはない.
|
||||||||||||||
(13) | UNSTRING文が開始されたとき,現在の受取り側は一意名-4のデータ項目とする.データは,一意名-1のデータ項目から一意名-4のデータ項目に,次の規則に従って転送される.
|
||||||||||||||
(14) | POINTER指定及びTALLYING(分解計数)指定のデータ項目の初期値は,利用者が設定しておかなければならない. |
||||||||||||||
(15) | 一意名-7のデータ項目の内容は,一意名-1のデータ項目中の文字が1文字調べられるごとに1ずつ増加する.POINTER指定付きのUNSTRING文の実行が終了すると,一意名-7のデータ項目の内容は,その初期値に,一意名-1のデータ項目中の検査された文字数を加えた値になる. |
||||||||||||||
(16) | TALLYING指定付きのUNSTRING文の実行が終了すると,一意名-8のデータ項目の内容は,UNSTRING文の実行開始時の値に,UNSTRING文の実行中に作用を受けた各受取り側項目の一意名-4の個数を加えた値になる. |
||||||||||||||
(17) | 次のいずれかの場合には,あふれ条件が生ずる.
|
||||||||||||||
(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文の処理の流れの例を示す.
送出し側項目(AN-SND)から受取り側項目(AN-R1,AN-R2,AN-R3,AN-R4)へ転記される文字位置を以下に示す.
(1)はAN-R1へ転記される左端の文字位置を示す.これは,POINTER指定で記述したED-PTRの初期値が示す文字位置である.AN-R1へは,区切り文字(この場合は“#”)が現れるまでの3字を転記する.
区切り文字は,DELIMITER IN指定の記述がないので転記されない.
(2)は,AN-R2へ転記される左端の文字位置を示す.AN-R2へは,区切り文字(“#”に対してALL指定の記述があるので“#”の繰返しである“##”)が現れるまでの3字が転記される.
区切り文字の繰返しの1回分が,AN-D2に転記される.
(3)は,AN-R3へ転記される左端の文字位置を示す.AN-R3へは,区切り文字(この場合は“*”)が現れるまでの3字を転記する.
区切り文字は,DELIMITER IN指定の記述がないので転記されない.また,COUNT IN指定の記述があるので,検査された文字の個数(この場合は3)がED-C3に転記される.
(4)は,AN-R4へ転記される左端の文字位置を示す.AN-R4へは,区切り文字(この場合は“*”)が最初の文字位置に現れるため空白を転記する.
区切り文字は,AN-D4に転記される.また,COUNT IN指定の記述があるので,検査された文字の個数(この場合は0)がED-C4に転記される.
(5)は,このUNSTRING文の実行後,POINTER指定で記述したED-PTRの値が示す文字位置である.したがって,AN-SND中にまだ検査されていない文字が残っているためにあふれ条件が生じて手続き名OVERFLOW-PROCに制御が移る.
また,TALLYING指定で書かれたED-TLYの値は,動作が行われた受取り側項目の個数(この場合は4)を加えた値となる.
次のようなデータ部の記述がある.
ここで各項目には,次の初期値が与えられている.
備考._ は空白を表す.
一意名 |
一意名の結果 |
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
|
||||||||||||||||||||||||
(2) | UNSTRING SEND-A
この例では,すべての受取り側が使われたのにもかかわらず,SEND-Aにはまだ検査されていない文字が残っている.したがって,もしこの例のUNSTRING文にON OVERFLOW指定が書いてあると,指定された無条件文を実行する. |
||||||||||||||||||||||||
(3) | UNSTRING SEND-A
|