データの流れ
UNSTRING ステートメントが開始されると、
データは、次の規則に従って送り出しフィールドから現行のデータ受け入れフィールドへ転送されます (現行のデータ受け入れフィールドは ID-4 です)。
- POINTER 句が指定されていない場合には、送り出しフィールドの文字ストリングは左端の文字から調査されます。 POINTER 句が指定されている場合には、ポインター・フィールド内の値によって指定された相対文字位置からフィールドが調査されます。
- DELIMITED BY 句が指定されている場合には、調査は左から右へ 1 文字ずつ、分離文字が検出されるまで続けられます。 分離文字が検出される前に送り出しフィールドの終わりに達した場合には、 調査は送り出しフィールドの最後の文字で終了します。 この時点でまだ受け入れフィールドが残っている場合には、次のフィールドが選択されます。 それ以外の場合には、オーバーフロー条件が起こります。
- DELIMITED BY 句が指定されていない場合には、
調査される文字数は現行のデータ受け入れフィールドのサイズと等しくなります。
これは、フィールドのデータ・カテゴリーによって異なります。
- 受け入れフィールドが英数字または英字である場合には、 調査される文字数は現行の受け入れフィールド内の文字数と等しくなります。
- 受け入れフィールドが数字である場合には、 調査される文字数は現行の受け入れフィールドの整数部分の文字数と等しくなります。
- 受け入れフィールドが SIGN IS SEPARATE 文節で記述されている場合には、 調査される文字数は現行の受け入れフィールドのサイズより 1 文字少なくなります。
- 受け入れフィールドが可変長データ項目として記述されている場合には、 調査される文字数は UNSTRING 操作開始時の現行の受け入れフィールドのサイズによって判別されます。
- 調査された文字 (すべての分離文字を除く) は英数字基本項目として取り扱われ、MOVE ステートメントの規則 (MOVE ステートメントを参照) に従って現行のデータ受け入れフィールドに移動されます。
- DELIMITER IN 句が指定されている場合には、 送り出しフィールド内の分離文字は基本英数字項目として取り扱われ、MOVE ステートメントの規則に従って現行の分離文字受け入れフィールドに移動されます。 区切り条件が送り出しフィールドの終わりである場合には、 現行の分離文字受け入れフィールドはスペースで埋められます。
- COUNT IN 句が指定されている場合には、調査された文字 (すべての分離文字を除く) 数と等しい値が、 基本項目移動の規則に従ってデータ・カウント・フィールドに転送されます。
- DELIMITED BY 句が指定されている場合には、 送り出しフィールドが、分離文字の右側にある最初の文字からさらに調査されます。
- DELIMITED BY 句が指定されていない場合には、 送り出しフィールドが、調査された最後の文字の右側にある最初の文字からさらに調査されます。
- 後続のデータ受け入れフィールドごとに、 送り出しフィールド内のすべての文字が転送され終わるまで、あるいはデータの入っていないデータ受け入れフィールドがなくなるまで、 上記のプロシージャーが繰り返されます。
- POINTER 句が指定されている場合には、 ポインター・フィールドの値は、送り出しフィールド内の文字が調査されるごとに 1 ずつ増やされるかのように変化します。 UNSTRING ステートメントの実行完了時には、ポインター・フィールドに、初期値と送り出しフィールド内の調査された文字数とを加算した値が入ります。
- TALLYING 句が指定されていて、UNSTRING ステートメントの実行が完了したときには、 フィールド・カウント・フィールドに、初期値と影響されたデータ受け入れ域の数とを加算した値が入ります。
注: すべての添え字付け、参照変更、可変長の計算、または関数の評価は、UNSTRING ステートメントの処理の開始時に 1 回だけ実行されます。
UNSTRING ステートメントの ID のいずれかが添え字付きまたは指標付きである場合には、添え字および指標は次のように評価されます。
- 送り出しフィールド、ポインター・フィールド、 またはフィールド・カウント・フィールドに関連付けられている添え字または指標は、 データが転送される直前に 1 回だけ評価されます。
- 分離文字、データ受け入れフィールド、分離文字受け入れフィールド、 またはデータ・カウント・フィールドに関連付けられている添え字または指標は、 データが当該データ項目へ転送される直前に評価されます。
図 1 に、UNSTRING ステートメントの実行規則を示します。
図 1. UNSTRING ステートメントの実行結果

- 1
- ID-R1 に 3 文字が入れられます。
- 2
- ALL * が指定されているため、連続するすべてのアスタリスクが処理されますが、ID-D1 には 1 つのアスタリスクだけが入れられます。
- 3
- ID-R2 に 5 文字が入れられます。
- 4
- ID-D2 に ? が入れられます。 現行の受け入れフィールドは ID-R3 になります。
- 5
- ID-D3 に ? が入れられます。 ID-R3 はスペースで埋められます。 文字は転送されないため、ID-C3 に 0 が入れられます。
- 6
- ID-R4 に 5 文字が入れられる前に、分離文字が検出されません。ID-C4 に 8 が入れられます。 これは、最後の分離文字以降に調べられた文字の数を表します。
- 7
- ID-P が 21 に更新されます。 これは、送り出しフィールドの全長 + 1 です。ID-T が 5 に更新されます。 これは、影響を受けたフィールド数 + 1 です。 ID-SEND 内に未調査の文字がないため、OVERFLOW EXIT は使用されません。