Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


STRING ステートメント

STRING ステートメント・ストリングは、 2 つ以上のデータ項目やリテラルの内容の一部または全部を一緒にして 1 つのデータ項目にまとめます。

MOVE ステートメントをいくつも並べる代わりに 1 つの STRING ステートメントで済ませることができます。

構文図を読む構文図をスキップする
フォーマット 

>>-STRING------------------------------------------------------->

   .-------------------------------------------------------.   
   | .----------------.                                    |   
   V V                |                                    |   
>------+-ID-1-------+-+--DELIMITED--+----+--+-ID-2-------+-+---->
       '-リテラル-1--'               '-BY-'  +-リテラル-2--+     
                                            '-SIZE-------'     

>--INTO--ID-3--+-------------------------+---------------------->
               '-+------+--POINTER--ID-4-'   
                 '-WITH-'                    

>--+--------------------------------------+------------------->
   '-+----+--OVERFLOW--命令ステートメント-1-'   
     '-ON-'                                     

>--+-------------------------------------------+-------------->
   '-NOT--+----+--OVERFLOW--命令ステートメント-2-'   
          '-ON-'                                     

>--+------------+----------------------------------------------><
   '-END-STRING-'   

ID-1リテラル-1
これは送り出しフィールド を表します。
DELIMITED BY 句
ストリングの限界を設定します。
ID-2 リテラル-2
これらは区切り文字です。つまり、転送するデータを区切る文字です。
SIZE
この指定をすると送り出し領域全体を転送します。
INTO 句
受け取りフィールドを示します。
ID-3
これは受け取りフィールド を表します。
POINTER 句
受け取りフィールド内の文字位置を指します。 ポインター・フィールドは、受け取りフィールドが USAGE DISPLAY、DISPLAY-1、または NATIONAL の場合に、それぞれ相対的な英数字文字位置、DBCS 文字位置、国別文字位置を示します。
ID-4
ポインター・フィールド を表します。ID-4 は、受け取りフィールドの長さに 1 を加えた値を入れられる十分な大きさにする必要があります。

次の規則が適用されます。

添え字、参照変更、可変長、可変位置、および関数 ID の評価は、STRING ステートメントの実行開始時に 1 回のみ行われます。したがって、ID-3 または ID-4 が、STRING ステートメントの中で添え字、参照修飾子、または関数引数として使用されているか、あるいは STRING ステートメントの中のいずれかの ID の長さまたは位置に影響する場合、これらの添え字、参照修飾子、可変長、可変位置、および関数について計算される値は、STRING ステートメントの結果によって影響されません。

ID-3 および ID-4 が同じストレージ域を占めると、 たとえそれらの ID が同じデータ記述項目によって定義されていても、 未定義の結果が生じます。

ID-1 または ID-2 が、ID-3 または ID-4 と同じストレージ域を占めると、 たとえそれらの ID が同じデータ記述項目によって定義されていても、未定義の結果が生じます。

STRING ステートメントの処理の詳細については、データ・フローを参照してください。

ON OVERFLOW 句

命令ステートメント-1
ここにあるステートメントは、 ポインター値が明示的または暗黙のうちに次のような値になると実行されます。
  • 1 より小さい値。
  • 受け取りフィールドの長さを超える値。

上記の状態のいずれかが生じると、オーバーフロー条件が起こり、 データはそれ以上転送されません。 ついで STRING 処理が終了し、NOT ON OVERFLOW 句が指定されている場合には、 それが無視され、制御は STRING ステートメントの終わりに移されるか、 または ON OVERFLOW 句が指定されていれば、命令ステートメント-1 に制御が移されます。

制御が命令ステートメント-1 に移された場合、命令ステートメント-1 に指定された各ステートメントの規則に従って、実行が継続されます。 プロシージャー・ブランチまたは明示的な制御の移動を引き起こす条件ステートメントが実行される場合、 制御はそれを起こすステートメントの規則に従って移されます。 そうでない場合、命令ステートメント-1 の実行完了時に、 制御は STRING ステートメントの最後に転送されます。

STRING ステートメントの実行時にオーバーフロー条件を生じる状態にならなければ、 データ転送の完了後、ON OVERFLOW 句は指定されていても無視されます。そして、制御は STRING ステートメントの終わりか、 または NOT ON OVERFLOW 句が指定されていれば命令ステートメント-2 に移されます。

制御が命令ステートメント-2 に移された場合、命令ステートメント-2 に指定された各ステートメントの規則に従って、実行が継続されます。 明示的な制御の移動を起こす、プロシージャーのブランチ・ステートメントや条件ステートメントが実行された場合は、制御はそのステートメントの規則に従って移されます。それ以外の場合は、命令ステートメント-2 の実行が完了すると、 制御は STRING ステートメントの終わりに移されます。

END-STRING 句

この明示的範囲終了符号は、STRING ステートメントの範囲を区切るために使用されます。 END-STRING 句を使用することによって、 条件 STRING ステートメントを他の条件ステートメントの中にネストすることができます。 END-STRING 句は、命令 STRING ステートメントと共に使用することもできます。

詳しくは、範囲区切りステートメントを参照してください。

データ・フロー

STRING ステートメントの実行時に、文字は送り出しフィールドから受け取りフィールドに転送されます。送り出しフィールドが処理される順序は、それらが指定されている順序です。 次の規則が適用されます。

  • 送り出しフィールドから受け取りフィールドに文字が転送される際は、以下の方法が使 用されます。
    • 国別送り出しフィールドの場合は、国別から国別への基本移動に関する MOVE ステートメントの規則を使用して、データが転送されます。ただし、スペースの埋め込みは行われません。
    • DBCS 送り出しフィールドの場合は、DBCS から DBCS への基本移動に関する MOVE ステートメントの規則を使用して、データが転送されます。ただし、スペースの埋め込みは行われません。
    • それ以外の場合は、英数字間の基本移動に関する MOVE ステートメントの規則を使用して、データが受け取りフィールドに転送されます。ただし、スペースの埋め込みは行われません (MOVE ステートメントを参照)。
  • DELIMITED BY ID-2 またはリテラル-2 を指定した場合、各送り出し項目の内容は、左端の文字位置から始めて、1 文字ずつ次のいずれかの時点まで移動されます。
    • その送り出しフィールドの区切り文字に到達したとき (区切り文字自体は移動されない)。
    • その送り出しフィールドの右端の文字が転送されたとき。
  • DELIMITED BY SIZE が指定されている場合、 それぞれの送り出しフィールドの全体が受け取りフィールドに転送されます。
  • 受け取りフィールドがいっぱいになるか、 またはすべての送り出しフィールドが処理されるとデータ転送操作は終わります。
  • POINTER 句を指定すると、COBOL ユーザーは明示的なポインター・フィールドを受け取りフィールドの中の データの配置を制御するために使用できるようになります。 ユーザーは明示的なポインターの初期値を設定しなければなりません。 この初期値は 1 未満であることも、受け取りフィールドの文字位置数を超えることもできません。

    使用上の注意: ポインター・フィールドは、受け取りフィールドの長さに 1 を加えた値を入れられる十分な大きさに定義する必要があります。これは、転送終了時にシステムがポインターを更新する際の算術オーバーフローを防止します。

  • POINTER 句を指定しない場合、ユーザーはポインターを使用することはできません。 ただし、システムは、初期値として 1 を持つ概念的な暗黙のポインターを使用します。
  • 概念的には、 STRING ステートメントが実行されるときのポインターの初期値 (明示的または暗黙の指定) は、 データが移動される受け取りフィールドの最初の文字位置です。 その位置から開始して、データは 1 文字ずつ左から右へと位置付けられていきます。 各文字が位置付けされるごとに、明示的または暗黙のポインターが 1 だけ増えます。ポインター・フィールドの値は、この方法によってのみ変更されます。処理が終了したときのポインター値は、 受け取りフィールドに移動された最後の文字より、常に 1 文字位置だけ先の値を示しています。

STRING ステートメントの実行が完了すると受け取りフィールドは、 データが移動された部分だけが変更されます。 受け取りフィールドの残りの部分には、 STRING ステートメントの今回の実行以前に存在していたデータが入っています。

次に示す STRING ステートメントを実行すると得られる結果は、ステートメントの後の図に図解したようなものになります。

STRING ID-1 ID-2 DELIMITED BY ID-3
       ID-4 ID-5 DELIMITED BY SIZE
  INTO ID-7 WITH POINTER ID-8
END-STRING

この図は、STRING ステートメントの処理を示しています。
詳細へのリンク。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)