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 句
- 受け取りフィールド内の文字位置を指します。ポインター・フィールドは、受け取りフィールドの使用法が DISPLAY、DISPLAY-1、または NATIONAL のときに、それぞれ相対的な英数字文字位置、DBCS 文字位置、国別文字位置を示します。
- ID-4
- ポインター・フィールド を表します。ID-4 は、受け取りフィールドの長さに 1 を加えた値を入れられる十分な大きさにする必要があります。
-
-
次の規則が適用されます。
-
ID-4 以外のすべての ID は、使用法 DISPLAY、DISPLAY-1、または NATIONAL として、明示的または暗黙的に記述されているデータ項目を参照しなければなりません。
- リテラル-1 またはリテラル-2 は、英数字、DBCS、または国別カテゴリーでなければなりません。また、ALL というワードで始まらない任意の表意定数 (NULL を除く) にすることができます。
- ID-1 または ID-2 が数字カテゴリーのデータ項目を参照する場合、それぞれの数字項目は、PICTURE 文字ストリング内に記号「P」を指定しないで整数として記述する必要があります。
- ID-3 は、数字編集、英数字編集、または国別編集カテゴリーの、使用法が DISPLAY の外部浮動小数点データ項目、または使用法 NATIONAL のデータ項目を参照してはなりません。
-
ID-3 は、JUSTIFIED 文節を指定して記述してはなりません。
- ID-3 が使用法 DISPLAY の場合、ID-1 および ID-2 は使用法 DISPLAY で、すべてのリテラルは英数字リテラルでなければなりません。ALL というワードで始まる表意定数を除き、任意の表意定数を指定できます。表意定数は、それぞれ 1 文字の英数字リテラルを表します。
- ID-3 が使用法 DISPLAY-1 の場合、ID-1 および ID-2 は使用法 DISPLAY-1 で、すべてのリテラルは DBCS リテラルでなければなりません。指定できる表意定数は SPACE のみです。これは、1 文字の DBCS リテラルを表します。DBCS-リテラル はすべて指定することはできません。
- ID-3 が使用法 NATIONAL の場合、ID-1 および ID-2 は使用法 NATIONAL で、すべてのリテラルは国別リテラルでなければなりません。シンボリック文字 および ALL というワードで始まる表意定数を除き、任意の表意定数を指定できます。表意定数は、それぞれ 1 文字の国別リテラルを表します。
- ID-1 または ID-2 が、数字、数字編集、または英数字編集カテゴリーとして記述されている使用法 DISPLAY の基本データ項目を参照する場合、この項目は英数字カテゴリーとして再定義されたかのように処理されます。
- ID-1 または ID-2 が、数字、数字編集、または国別編集カテゴリーの項目として記述されている、使用法 NATIONAL の基本データ項目を参照する場合、この項目は国別カテゴリーとして再定義されたかのように処理されます。
- ID-4 は、PICTURE 文字ストリングの中に記号 P を指定して記述することはできません。
- STRING ステートメントでは、ID をウィンドウ化日付フィールドにすることはできません。
添え字、参照変更、可変長、可変位置、および関数 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 ステートメントの実行時に、文字は送り出しフィールドから受け取りフィールドに転送されます。
送り出しフィールドが処理される順序は、それらが指定されている順序です。次の規則が適用されます。
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
|