ILE COBOL 解説書
STRING
ステートメントが実行されると、データが送り出しフィールドから受け入れフィールドに移動されます。
送り出しフィールドが処理される順序は、それらが指定されている順序です。
次の規則が適用されます。
- 送り出しフィールドの文字は、
英数字基本項目間の移動に関する規則に従って受け入れフィールドに転送されます。
ただし、このときにスペースの埋め込みは行われません (MOVE ステートメントを参照してください)。
- DELIMITED BY ID /
リテラルを指定した場合には、各送り出し項目の内容は、左端の文字から、次のいずれかになるまで
1 文字ずつ転送されます。
- この送り出しフィールドの分離文字に到達する
(分離文字そのものは転送されません)。
- この送り出しフィールドの右端の文字が転送される。
- DELIMITED BY SIZE ID
を指定した場合には、それぞれの送り出しフィールド全体が受け入れフィールドへ転送されます。
- 受け入れフィールドが満杯になるかまたはすべての送り出しフィールドの処理が完了すると、操作が終了します。
- POINTER 句を指定した場合には、COBOL
ユーザーは受け入れフィールド内のデータの配置を制御するための明示ポインター・フィールドを使用できます。
ユーザーは明示ポインターの初期値を設定しなければなりません。 初期値は、1
より小さいかまたは受け入れフィールドの文字カウントより大きい値であってはなりません。
(ポインター・フィールドは、受け入れフィールドの長さに 1
を加えた値を含むために十分な大きさのフィールドとして定義されていなければなりません。
これは、転送の終了時にシステムがポインターを更新する際に算術オーバーフローが起こらないようにするためです。)
- POINTER
句を指定しない場合には、ユーザーはポインターを使用することができません。
ただし、初期値 1 を持つ概念上の暗黙ポインターがシステムによって使用されます。
- 概念上、STRING ステートメント実行時の (明示または暗黙)
ポインターの初期値は、データが転送される受け入れフィールドの先頭の文字位置です。
その位置から始めて、データは左から右へ 1 文字ずつ配置されます。
その位置から始めて、データは左から右へ 1 文字ずつ配置されます。
各文字が配置されるたびに、明示または暗黙ポインターが 1 ずつ増やされます。
ポインター・フィールド中の値はこの方法によってだけ変更されます。
処理の終了時には、ポインター値は必ず、受け入れフィールドに転送された最後の文字の次の文字と等しい値を指します。
添え字付け、参照変更、可変長の計算、または関数の評価は、STRING
ステートメントの処理の開始時に 1 回だけ実行されます。 このため、ID-3 または
ID-4 が、STRING
ステートメント内で添え字、参照修飾子、または関数引数として使用されるか、
または STRING ステートメントの任意の ID の長さまたは位置に影響する場合、
これらの値は STRING ステートメントの始まりにおいて判別され、STRING
ステートメントの結果には影響されません。
ID-1 または ID-2 が ID-3 または ID-4 と同じ記憶域を占有している場合、
または ID-3 と ID-4 が同じ記憶域を占有している場合には、STRING
ステートメントの実行の結果は未定義です。
STRING
ステートメントの実行が完了すると、受け入れフィールドのうち、データが転送された部分だけが変更されます。
受け入れフィールドの残りの部分には、この STRING
ステートメントの実行前に入っていたデータがそのまま残っています。
次の STRING ステートメントが実行された場合、得られる結果は 図 23 に示されているようになります。
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
図 23. STRING ステートメントの実行結果

[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]