STRING 文

STRING 文は、複数のデータ項目の内容の一部または全部を連結して単一のデータ項目を作成する。

一般形式

STRING Statement

構文規則

  1. 各定数には、任意の表意定数を使用できる。ただし、ALL を除く。
  2. 定数はすべて文字定数とする。identifier-4 を除く一意名はすべて、明示的または暗黙的に USAGE IS DISPLAY とする。
  3. identifier-3 は基本英数字データ項目とする。編集記号または JUSTIFIED 句は指定できない。
  4. identifier-4 は、整数の基本データ項目とする。その大きさは、identifier-3 が参照する領域の大きさに 1 を加えた値を収められるサイズとする。identifier-4 の PICTURE 文字列には、「P」を使用できない。
  5. identifier-1 または identifier-2 が基本数値データ項目である場合、これは PICTURE 文字列に「P」を含まない整数とする。
  6. ANS85 identifier-3 は部分参照できない。
  7. MFOS390 identifier-3 は部分参照できる。

一般規則

  1. identifier-1 または literal-1 は送信側項目を表す。identifier-3 は受信側項目を表す。
  2. identifier-2 または literal-2 は、転記の区切り文字を示す。SIZE 指定を使用すると、identifier-1 または literal-1 で定義したデータ項目の内容がすべて転記される。区切り文字として表意定数を指定すると、それは 1 文字の文字定数として扱われる。
  3. 表意定数を literal-1 または literal-2 として指定すると、暗黙的に用途が DISPLAY である 1 文字のデータ項目として扱われる。
  4. STRING 文を実行すると、以下の規則に従ってデータが転送される。
    1. 英数字間の転記規則に従って、literal-1 の文字、または identifier-1 が参照するデータ項目の内容の文字が identifier-3 の内容に転送される。ただし、空白文字の穴埋めは行われない。「MOVE 文」のトピックを参照。
    2. SIZE を指定せずに DELIMITED を指定すると、identifier-1 が参照するデータ項目の内容または literal-1 の値が、受信側データ項目に転送される。その順序は STRING 文で指定した順番であり、左端の文字から右へ順に進み、データ項目の末尾に達した時点、literal-2 で指定した文字に達した時点、または identifier-2 の内容で指定した文字に達した時点で終了する。literal-2 で指定した文字、または identifier-2 が参照するデータ項目が指定した文字は転送されない。
    3. SIZE を指定して DELIMITED を指定すると、literal-1 の内容全体または identifier-1 が参照するデータ項目の内容が、identifier-3 が参照するデータ項目に転送される。その順序は STRING 文で指定した順番であり、すべてのデータが転送された時点、または identifier-3 が参照するデータ項目の末尾に達した時点で、この転送処理は終了する。
  5. POINTER を指定した場合は identifier-4 を明示的に使用できる。その場合、identifier-4 の初期値はユーザー自身で設定する。初期値は 1 以上とする。
  6. POINTER を指定しない場合は、初期値を 1 で identifier-4 を指定したものとして、以下の一般規則が適用される。
  7. identifier-3 が参照するデータ項目に文字列を転送する場合、転記処理は、文字が一度に 1 つずつ転記され、ソースから、identifier-3 が参照するデータ項目の、identifier-4 の関連値で示される文字位置に転記された場合と同様に行われる。その際、identifier-4 の値を 1 繰り上げてから、次の文字が転記される。identifier-4 の関連値が変更されるのは、STRING 文の実行中に上記の処理が行われる場合のみである。
  8. STRING 文の実行が終了した時点で、identifier-3 が参照するデータ項目の内容のうち、STRING 文の実行中に参照された部分のみが変更されている。identifier-3 が参照するデータ項目のそれ以外の部分には、STRING 文を実行する前のデータがそのまま残っている。
  9. identifier-3 が参照するデータ項目に文字を転記する各処理の前に、identifier-4 が参照するデータ項目に関連付けられた値が 1 未満である場合、または identifier-3 が参照するデータ項目内の文字位置の数を超えている場合は、identifier-3 が参照するデータ項目へのデータ転送はそれ以上行われない。

    ANS85 この場合、NOT ON OVERFLOW は指定されている場合でも無視され、

    制御は STRING 文の最後に移るか、ON OVERFLOW が指定されている場合は imperative-statement-1 に移る。制御が imperative-statement-1 に移ると、imperative-statement-1 で指定した各文に関する規則に従って実行処理が続けられる。制御を明示的に移す手続き分岐文または条件文を実行すると、その文に関する手続きに従って制御が移る。これ以外の場合は、imperative-statement-1 の実行が終了すると、STRING 文の末尾に制御が移る。

  10. ANS85 NOT ON OVERFLOW を指定して STRING 文を実行する際に、一般規則 9 に記載の条件が検出されない場合は、他の一般規則に従ってデータ転送が完了した後に、ON OVERFLOW (指定されている場合) は無視され、制御が STRING 文の末尾に移る。NOT ON OVERFLOW が指定されている場合は、imperative- statement-2 に制御が移る。制御が imperative-statement-2 に移ると、imperative-statement-2 で指定した各文に関する規則に従って実行処理が続けられる。制御を明示的に移す手続き分岐文または条件文を実行すると、その文に関する手続きに従って制御が移る。これ以外の場合は、imperative-statement-2 の実行が終了すると、STRING 文の末尾に制御が移る。
  11. ANS85 END-STRING 指定は STRING 文の範囲を区切る。(