Index
STRING

【用途】
データ項目をくっつける命令。複数の項目を部分的、或は全部をくっつけることができる便利な命令。
試験もこういう命令問題を出せば面白いのに。頻度は普通。憶えて損はないです。

【使用例】
・下の構文から引用してみました。



この例で一行ずつ解説してみましょう。

STRING AN-1 SPACE AN-2 DELIMITED BY SIZE
(AN-1、空白、AN-2の順番で全桁を転送しなさい 結果⇒"STRING STATE")

AN-4 AN-5 DELIMITED BY "*"
(次に、AN-4とAN-5は"*"が発生するまでの文字を続けて転送しなさい 結果⇒"MENT"
  ※AN-4は"*"が発生する手前までの"MENT"が転送されます。
    AN-5は1桁目にいきなり"*"なので何も転送されません。)

INTO AN-7 WITH POINTER ED-8.
(上記の編集項目"STRING STATEMENT"をED-8で指定した桁数だけ空けてAN-7に部分的に上書きしなさい)

よって最終的に結果は、 このようになるわけ
Image

STRING文


機能

STRING(連結)文は,幾つかのデータ項目の内容の一部又は全部をつなぎ合わせて,一つのデータ項目に移す.


一般形式

【書き方】
Image


構文規則

(1)

定数-1又は定数-2は,語ALLで始まる表意定数であってはならない.

(2)

定数は,文字定数又は日本語定数でなければならない.一意名-4以外の一意名の用途は,明に又は暗に表示用と記述されていなければならない.

(3)

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

(4)

一意名-3は,編集データ項目であってはならず,JUSTIFIED句を記述してはならない.

(5)

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

(6)

一意名-1又は一意名-2が,数字項目の場合,それは整数項目でなければならず,かつそのPICTURE句の文字列中に文字“P”を含んでいてはならない.

(7)

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


一般規則

(1)

一意名-1又は定数-1を送出し側とし,一意名-3を受取り側とする.

(2)

定数-2及び一意名-2のデータ項目の内容は,転記の区切り文字を示す.SIZE(文字数)句を指定すると,定数-1又は一意名-1のデータ項目の内容のすべてが転記される.区切り文字として表意定数を使うと,それは1けたの文字定数とみなされる.

(3)

定数-1又は定数-2に表意定数を使うと,それは用途が表示用である暗の1けたのデータ項目とみなされる.

(4)

STRING文を実行すると,データは次の規則に従って移される.
(a)

定数-1の文字列又は一意名-1のデータ項目の内容が,英数字と英数字の間の転記の規則に従って,一意名-3のデータ項目に移される.ただし,空白づめは行われない.

(b)

DELIMITED(区切り)指定でSIZE以外を書くと,一意名-1のデータ項目の内容又は定数-1の値が,書いた順に,最左端の文字から右の方へ送出し側項目の終わり又は受取り側項目の終わりまで,又は定数-2若しくは一意名-2のデータ項目の内容で指定した文字列が現れるまで,受取り側項目に移される.定数-2又は一意名-2のデータ項目の内容で指定した文字列それ自身は,移されない.

(c)

DELIMITED指定でSIZEを書くと,定数-1の値又は一意名-1のデータ項目の内容が,書いた順に,データ全部が送られるまで,又は一意名-3のデータ項目の終わりに達するまで,一意名-3のデータ項目に送られる.
定数-1又は一意名-1のデータ項目の繰返しがすべて処理されるまで上記処理を続ける.

(5)

POINTER(文字位置)指定を書く場合,一意名-4のデータ項目の初期値は,STRING文の実行前に利用者が設定しなければならない.初期値は,1以上でなければならない.

(6)

POINTER指定を書かないと,一意名-4に初期値として1を入れたものとみなす.

(7)

一意名-3のデータ項目に文字が送られるときの動作は,次による.一意名-4のデータ項目の値が,一意名-3のデータ項目の文字数を超えていなければ,文字は,送出し側から一意名-3のデータ項目中の,一意名-4のデータ項目の値が示す文字位置へ,1文字ずつ送られる.その後,次の文字が送られる前又はSTRING文の実行が終わる前に,一意名-4のデータ項目が1だけ増やされる. STRING文の実行中に,一意名-4のデータ項目の値が変わるのは,この場合だけとする.

(8)

STRING文の実行が終わったとき,一意名-3のデータ項目の中でその値が変わるのは,このSTRING文で文字が送られた部分だけとする.一意名-3のデータ項目の他の部分には,このSTRING文の実行前の内容が残っている.

(9)

一意名-3のデータ項目に文字を送る前に,一意名-4のデータ項目の値が,1より小さいか一意名-3のデータ項目の文字数より大きいと,それ以上文字は送られない.このとき,NOT ON OVERFLOW指定が書かれていても無視され,制御は,STRING文の終わり,又はON OVERFLOW指定が書かれていれば無条件文-1に移る.制御が無条件文-1に移った場合,無条件文-1中に指定された各文の規則に従って実行が続けられる.制御の明示移行を起こす手続き分岐文又は条件文が実行されると,その文の規則に従って制御は移る.そうでなければ,無条件文-1の実行を完了し,制御はSTRING文の終わりに移る.

(10)

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

(11)

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

(12)

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

Image

各送出し側項目(AN-1,AN-2,SPACE,AN-4,AN-5)が受取り側項目(AN-7)に転記される文字位置を以下に示す.
   実行前のAN-7の内容:
   

Image

(1)は,AN-1が転記される左端の文字位置を示す.これは,POINTER指定で記述したED-8の初期値が示す文字位置である.また,AN-1に対するDELIMITED指定でSIZEを指定しているので,AN-1の内容のすべてがAN-7に移される.したがって,ED-8の値は9に更新される.

(2)は,表意定数SPACEが転記される左端の文字位置を示す.表意定数SPACEに対するDELIMITED指定でSIZEを指定しているので,表意定数SPACEの1字がAN-7に移される.したがって,ED-8の値は10に更新される.

(3)は,AN-2が転記される左端の文字位置を示す.また,AN-2に対するDELIMITED指定でSIZEを指定しているので,AN-2の内容のすべてがAN-7に移される.したがって,ED-8の値は15に更新される.

(4)は,AN-4が転記される左端の文字位置を示す.また,AN-4に対するDELIMITED指定で書かれた“#”が現れるまでの4字がAN-7に移される.したがって,ED-8の値は19に更新される.

(5)は,AN-5が転記される左端の文字位置を示す.また,AN-5に対するDELIMITED指定で書かれた“#”が,AN-5の最左端の文字位置に現れるために何もAN-7に移されない.したがって,ED-8の値も更新されない.

このSTRING文の実行後のAN-7及びED-8の内容を以下に示す.

   実行後のAN-7の内容:
   

Image

   実行後のED-8の内容:
   

Image


Index