UNSTRING ステートメントを使用することによって、送り出しフィールドの中の連続するデータを分割して、 複数の受け取りフィールドに入れることができます。
フォーマット >>-UNSTRING--ID-1-----------------------------------------------> >--+---------------------------------------------------------------------------------+--> '-DELIMITED--+----+--+-----+--+-ID-2-------+--+---------------------------------+-' '-BY-' '-ALL-' '-リテラル-1--' | .-----------------------------. | | V | | '---OR--+-----+--+-ID-3-------+-+-' '-ALL-' '-リテラル-2--' >--INTO---------------------------------------------------------> .------------------------------------------------------------. V | >----ID-4--+-------------------------+--+---------------------+-+--> '-DELIMITER--+----+--ID-5-' '-COUNT--+----+--ID-6-' '-IN-' '-IN-' >--+-------------------------+--+------------------------+------> '-+------+--POINTER--ID-7-' '-TALLYING--+----+--ID-8-' '-WITH-' '-IN-' >--+--------------------------------------+-------------------> '-+----+--OVERFLOW--命令ステートメント-1-' '-ON-' >--+-------------------------------------------+--------------> '-NOT--+----+--OVERFLOW--命令ステートメント-2-' '-ON-' >--+--------------+-------------------------------------------->< '-END-UNSTRING-'
ID-1 は、英字、英数字、英数字編集、DBCS、国別、または国別編集カテゴリーのデータ項目を参照しなければなりません。
ID-2 および ID-3 は、英字、英数字、英数字編集、DBCS、国別、または国別編集カテゴリーのデータ項目を参照しなければなりません。
リテラル-1 またはリテラル-2 は、英数字、DBCS、または国別カテゴリーでなければなりません。また、ALL というワードで始まる形象定数にすることはできません。
ID-4 は、英字、英数字、数字、DBCS、または国別カテゴリーのデータ項目を参照しなければなりません。参照されるデータ項目が数字カテゴリーの場合は、その PICTURE 文字ストリングにはピクチャー記号 P を含めることはできません。また、USAGE DISPLAY または NATIONAL でなければなりません。
ID-5 は、英字、英数字、DBCS、または国別カテゴリーのデータ項目を参照しなければなりません。
ID-6 は、PICTURE 文字ストリングの中で記号 P を使用しないで定義された整数データ項目でなければなりません。
ID-7 ストリングの記号 P なしで定義された 整数データ項目である必要があります。
ID-7は、ID-1 によって参照されるデータ項目内の文字位置数に 1 を加えた値が十分に入るサイズの データ項目として記述する必要があります。ID-8 は、PICTURE 文字ストリングの中で記号 P を使用しないで定義された整数データ項目でなければなりません。
次の規則が適用されます。
カウント・フィールド (ID-6) およびポインター・フィールド (ID-7) は、バイト数ではなく文字位置 (英数字、DBCS、または国別) の数によって増分されます。
UNSTRING ステートメントの実行開始時に、特定のエレメントの 評価または計算が 1 回だけ実行されることを除き、MOVE ステートメントの シリーズを 1 つの UNSTRING ステートメントで置き換えることができます。 詳しくは、UNSTRING ステートメントの実行終了時の値を参照してください。
移動の規則は、ID-1 のカテゴリーの基本送り出し項目に対する MOVE ステートメントの規則と 同じであり、該当する ID-4 が受け取り項目となります (MOVE ステートメントを参照)。 例えば、ID-1 が DBCS 項目の場合は、DBCS 項目の移動規則が使用されます。
この句は、データ転送を制御するデータ内の区切り文字を指定します。
ID-2、ID-3、リテラル-1、またはリテラル-2 は、それぞれ 1 つの区切り文字を表します。
DELIMITED BY 句を指定していない 場合、 DELIMITER IN 句および COUNT IN 句を指定してはなりません。
DELIMITED BY ALL が指定されていない 場合には、いずれかの 区切り文字が 2 つ以上連続して出現すると、現在のデータ受け取りフィールド (ID-4) は、 データ受け取りフィールドの記述に従って、スペースまたは 0 で埋め込まれます。
この句は、データの移動先フィールドを指定します。
ID-4 はデータ受け取りフィールド を表します。
ID-5 は区切り文字受け取りフィールド を表します。
DELIMITED BY 句を指定していない 場合、DELIMITED IN 句を指定してはなりません。
ID-6は、各データ転送のデータ個数フィールド です。各フィールドには、この受け取りフィールドへの移動に関して、送り出しフィールド内の 検査済み文字 (区切り文字で終わるか、または送り出しフィールドの終わりで終わる) の 個数が入れられます。 区切り文字はこの個数には含まれません。
DELIMITED BY 句を指定していない 場合、COUNT IN 句を指定してはなりません。
POINTER 句を指定した場合、ポインター・フィールド ID-7 の値は、送り出しフィールドの文字位置が検査されるたびに 1 ずつ増分されます。UNSTRING ステートメントの実行が完了すると、ポインター・フィールドには、 送り出しフィールド内で検査された文字位置数とその初期値を加えた値が入ります。
この句を指定する場合には、UNSTRING ステートメントの実行を開始する前に、ユーザーはポインター・フィールドを初期化する必要があります。
TALLYING 句が指定されるときに、領域カウント・フィールド ID-8 には、(UNSTRING ステートメントの実行の終了時に) 受け取り領域が作用したデータ数を初期値に加えた値が入ります。
この句を指定する場合には、UNSTRING ステートメントの実行を開始する前に、ユーザーは領域カウント・フィールドを初期化する必要があります。
次のような場合に、オーバーフロー条件が存在します。
オーバーフロー条件は、次のような操作の結果生じます。
制御が命令ステートメント-1 に移された場合、命令ステートメント-1 に指定された各ステートメントの規則に従って、実行が継続されます。明示的な制御の移動を起こす、プロシージャーのブランチ・ステートメントや条件ステートメントが実行された場合は、制御はそのステートメントの規則に従って移されます。それ以外の場合は、命令ステートメント-1 の実行が完了すると、 制御は UNSTRING ステートメントの終わりに移されます。
UNSTRING ステートメントの実行中に、オーバーフロー条件を引き起こす 条件が生じないときには、以下のようになります。
制御が命令ステートメント-2 に移された場合、命令ステートメント-2 に指定された各ステートメントの規則に従って、実行が継続されます。明示的な制御の移動を起こす、プロシージャーのブランチ・ステートメントや条件ステートメントが実行された場合は、制御はそのステートメントの規則に従って移されます。それ以外の場合は、命令ステートメント-2 の実行が完了すると、 制御は UNSTRING ステートメントの終わりに移されます。
この明示的範囲終了符号は、UNSTRING ステートメントの範囲を区切るために使用されます。 END-UNSTRING 句を使用することによって、 条件 UNSTRING ステートメントを他の条件ステートメント内にネストすることができます。 END-UNSTRING 句は、命令 UNSTRING ステートメントと共に使用することもできます。
詳しくは、範囲区切りステートメントを参照してください。
UNSTRING ステートメントが開始されると、データは次の規則に従って 送り出しフィールドから現在のデータ受け取りフィールドに移動されます。
ステージ 1: 検査
POINTER 句が指定されていない 場合、送り出しフィールドの文字ストリングは 左端の文字位置から検査が開始されます。
DELIMITED BY 句が指定されていない 場合、検査される文字位置の数は、 現在のデータ受け取りフィールドのサイズに等しくなります。以下の表の説明を参照してください。受け取りフィールドのカテゴリーの扱いによるサイズについては、表 1を参照してください。
| 受け取りフィールドが以下の場合 | 検査される文字位置の数 |
|---|---|
| 英数字または英字 | 現行受け取りフィールドの英数字文字位置数と等しい |
| DBCS | 現行受け取りフィールドの DBCS 文字位置数と等しい |
| 国別 | 現行受け取りフィールドの国別文字位置数と等しい |
| 数字 | 現行受け取りフィールドの整数部の文字位置数と等しい |
| SIGN IS SEPARATE 節で説明されている | 現行受け取りフィールドのサイズより 1 小さい |
| 可変長データ項目として説明されている | UNSTRING 操作の開始時に現行受け取りフィールドのサイズで判別する |
ステージ 2: 移動
| ID-1 (送り出しフィールド) のカテゴリー | 基本データ項目のカテゴリー |
|---|---|
| 英数字編集 | 英数字 |
| 国別編集 | 国別 |
ステージ 3: 連続的な反復
DELIMITED BY 句を指定しない 場合、送り出しフィールドは、 検査された最後の文字位置の右側にある最初の文字位置からさらに検査されます。
以下の操作は、1 回だけ、UNSTRING ステートメントの実行開始時に 行われます。
したがって、ID-4、ID-5、ID-6、ID-7、または ID-8 が、 UNSTRING ステートメントの中で添え字、参照修飾子、または関数引数として使用される場合、 または、UNSTRING ステートメント内の ID のいずれかの長さまたは位置に 影響を与える場合、これらの値は UNSTRING ステートメントの実行開始時に決められるので、 UNSTRING ステートメントの実行結果によって影響されることはありません。