5.8.14 reorgオペランド
- 意味
-
入力レコード編集フォーマットを指定します。
入力レコード中の編集する範囲(以降,編集フィールドと呼びます)を指定した位置に置くことで,レコード形式を再編成する機能です。
編集フィールドは,指定した順序に従って,順に前の編集フィールドの後方に隣接して置かれます。次の図に示すように,編集フィールドの一部または全部が重なり合う指定もできます。
図5‒6 編集フィールドの指定例 固定長レコードの場合は,編集フィールドがレコード内にすべて含まれている必要があります。
また可変長レコードの場合は,編集フィールドのバイト長を指定しなかった編集フィールドを除き,編集フィールドが実レコード内にすべて含まれている必要があります。
編集フィールドの指定例を次に示します。
(a) 固定長レコードの場合の例
例1:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長≦レコード長
例2:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長>レコード長
例3:開始バイト位置=レコード長
例4:開始バイト位置>レコード長
(b) 可変長レコードおよびテキストの場合の例
- (1)編集フィールド長が指定されている場合
-
例1:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長≦レコード長
例2:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長>レコード長
例3:開始バイト位置=レコード長
例4:開始バイト位置>レコード長
図5‒8 可変長レコードおよびテキストの場合の指定例(編集フィールド長指定あり) - (2)編集フィールド長が指定されていない場合
-
例1:開始バイト位置≦レコード長−1
例2:開始バイト位置=レコード長
例3:開始バイト位置>レコード長
図5‒9 可変長レコードおよびテキストの場合の指定例(編集フィールド長指定なし) reorgオペランド以外に,中間レコード(ソート,マージ,コピー結果)と,出力レコードに対してレコード編集を指定するパラメタ・オペランドがあります。レコード編集の種類によって,入力レコードと異なった位置にキーや項目を再編成するような場合は注意が必要となります。
ソートキー,マージキー,集約キー,比較項目,および集約項目の位置(範囲)は,「付録F レコード編集処理で基になるレコード(SORT EEの機能)」に示す規則に従って指定してください。
- 形式
reorg=reorganization-format [△reorganization-format …]
指定できるフォーマットの個数は,1〜128個です。
- 指定値
-
reorganization-formatの形式を次に示します。
- reorganization-formatオペランド形式1
[insertpos]+pos[−len][boundary]
入力レコード中の編集フィールドおよび挿入位置を指定します。
-
[insertpos]+pos[−len][boundary]は必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。
-
[insertpos]+pos[−len][boundary]を複数指定する場合は,1個以上の空白またはタブで区切って指定します。
-
- reorganization-formatオペランド形式2
[insertpos]+insertdata−cnt
挿入データ形式および挿入位置を指定します。
-
[insertpos]+insertdata−cntは必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。
-
[insertpos]+insertdata−cntを複数指定する場合は,1個以上の空白またはタブで区切って指定します。
-
reorganization-formatに指定するそれぞれの値について次に示します。
- insertpos
-
-
編集フィールド,および挿入データ(文字列,16進数,または空白)の挿入開始バイト位置を5桁以内の数字で指定します。
-
前の編集フィールドや挿入データと重なる位置は指定できません。
-
前の編集フィールドまたは挿入データとの間に間隔が生じる場合には,空白を埋め込みます。
-
-locatajstパラメタを指定したかどうかによって,レコード先頭の解釈が異なります。また,テキストファイルの場合は,入力データのエンコードによって指定範囲が異なります。挿入開始バイト位置に指定できる値の範囲を次の表に示します。
ファイル編成
-locatajstパラメタ
指定あり
指定なし
固定長順編成ファイル
1〜65,535
0〜65,534
可変長順編成ファイル
1または5〜65,539※1
テキストファイル※2
改行文字
「LF」
ASCII
SJIS
EUC-JP
EUC-HJ
UTF-8
1〜65,535
UCS-2LE
UCS-2BE
UTF-16LE
UTF-16BE
1〜65,533
(2の倍数+1※3)
0〜65,532
(2の倍数※3)
UCS-4LE
UCS-4BE
UTF-32LE
UTF-32BE
1〜65,529
(4の倍数+1※4)
0〜65,528
(4の倍数※4)
改行文字
「CRLF」
ASCII
SJIS
EUC-JP
EUC-HJ
UTF-8
1〜65,534
0〜65,533
UCS-2LE
UCS-2BE
UTF-16LE
UTF-16BE
1〜65,531
(2の倍数+1※3)
0〜65,530
(2の倍数※3)
UCS-4LE
UCS-4BE
UTF-32LE
UTF-32BE
1〜65,525
(4の倍数+1※4)
0〜65,524
(4の倍数※4)
ファイル編成
-locatajstパラメタ
指定あり
指定なし
固定長順編成ファイル
1
0
可変長順編成ファイル
1または5※
0
テキストファイル
1
0
-
- +pos
-
-
編集フィールドのデータ位置を,5桁以内の数字で指定します。なお,-locatajstパラメタを指定したかどうかによって,レコード先頭の解釈が異なります。
-
入力データのエンコードに「UCS-2LE」,「UCS-2BE」,「UTF-16LE」,「UTF-16BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-16LEまたはUTF-16BE)」を指定した場合,データ位置には「2の倍数」を指定してください。2の倍数以外を指定すると,KBLS1503-Eメッセージが表示されてエラーになります。なお,-locatajstパラメタを同時に指定している場合は,「2の倍数+1」を指定してください。
-
入力データのエンコードに「UCS-4LE」,「UCS-4BE」,「UTF-32LE」,「UTF-32BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-32LEまたはUTF-32BE)」を指定した場合,データ位置には「4の倍数」を指定してください。4の倍数以外を指定すると,KBLS1503-Eメッセージが表示されてエラーになります。なお,-locatajstパラメタを同時に指定している場合は,「4の倍数+1」を指定してください。
-
データ位置に指定できる値の範囲は,insertposの挿入開始バイト位置に指定できる値の範囲と同じです。
-
- −len
-
-
編集フィールドのバイト長を,5桁以内の数字で指定します。
-
入力ファイルが可変長順編成ファイル,またはテキストファイルの場合,最後の編集フィールドに限りバイト長を省略できます。省略した場合,指定したデータ位置から実レコードの最後までを編集フィールドとして扱います。
-
編集フィールドのバイト長に指定できる範囲を次の表に示します。
ファイル編成
-locatajstパラメタ
指定あり
指定なし
固定長順編成ファイル
1〜65,535
1〜65,535
可変長順編成ファイル
1〜65,539
テキストファイル※1
改行文字
「LF」
ASCII
SJIS
EUC-JP
EUC-HJ
UTF-8
1〜65,535
UCS-2LE
UCS-2BE
UTF-16LE
UTF-16BE
2〜65,534
(2の倍数※2)
2〜65,534
(2の倍数※2)
UCS-4LE
UCS-4BE
UTF-32LE
UTF-32BE
4〜65,532
(4の倍数※3)
4〜65,532
(4の倍数※3)
改行文字
「CRLF」
ASCII
SJIS
EUC-JP
EUC-HJ
UTF-8
1〜65,534
1〜65,534
UCS-2LE
UCS-2BE
UTF-16LE
UTF-16BE
2〜65,532
(2の倍数※2)
2〜65,532
(2の倍数※2)
UCS-4LE
UCS-4BE
UTF-32LE
UTF-32BE
4〜65,528
(4の倍数※3)
4〜65,528
(4の倍数※3)
-
- +insertdata
-
-
挿入するデータの形式を指定します。
insertdataに指定する値を次の表に示します。
insertdataに指定できる値
データ形式
X
空白
Z
ゼロ
C'文字列'
文字列
X'16進数'
16進数
-
入力ファイルがテキストファイルの場合,挿入データに改行文字は指定できません。
-
16進数として指定できるのは「0〜9」および「A〜F」だけです。
-
16進数に指定できる桁数は,次のとおりです。
ファイル編成
X'16進数'の指定桁数
固定長順編成ファイル
偶数桁
可変長順編成ファイル
偶数桁
テキストファイル
ASCII
偶数桁
SJIS
EUC-JP
EUC-HJ
UTF-8
UCS-2LE
4の倍数桁
UCS-2BE
UTF-16LE
UTF-16BE
UCS-4LE
8の倍数桁
UCS-4BE
UTF-32LE
UTF-32BE
-
入力データのエンコードが「UCS-2LE」,「UCS-2BE」,「UTF-16LE」,「UTF-16BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-16LEまたはUTF-16BE)」の場合,「UCS-2」の文字コードのデータ形式となります。「付録H Unicode操作文字コード一覧(SORT EE)」の「表H-3 ASCII対応予約文字一覧」を参照してください。
-
入力データのエンコードが「UCS-4LE」,「UCS-4BE」,「UTF-32LE」,「UTF-32BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-32LEまたはUTF-32BE)」の場合,「UCS-4」の文字コードのデータ形式となります。「付録H Unicode操作文字コード一覧(SORT EE)」の「表H-3 ASCII対応予約文字一覧」を参照してください。
-
入力データのエンコードが「EUC-HJ」で,マルチバイト文字を挿入する場合は「X'16進数'」形式で指定してください。
-
文字列データをexsortコマンドに指定する場合,フォーマット全体をダブルクォーテーションで囲んで指定してください。
-
exsortパラメタファイルに指定する場合は,ダブルクォーテーションで囲まないでください。
文字列データの指定例を次に示します。
指定先
記述例
備考
exsortコマンド
reorg="0+32-10 +C'ABCD'-1"
ダブルクォーテーションで囲みます。
exsortパラメタファイル
reorg=0+32-10 +C'ABCD'-1
ダブルクォーテーションで囲みません。
-
- −cnt
-
-
挿入データの繰り返し回数を,1〜65,535の5桁以内の数字で指定します。
-
+insertdataで挿入するデータの形式を指定した場合,この設定は省略できません。ただし,「挿入データのバイト長※×繰り返し回数」の値は,65,535バイト以下にする必要があります。(注※ 16進数で指定した場合は,2桁で1バイトとなります。)
-
- boundary
-
-
編集フィールドを配置するときの境界調整を指定します。
-
レコードの先頭は8バイト境界から始まるものとします。
-
境界調整の結果,前の編集フィールドとの間にできる間隔にはX'00'が挿入されます。編集フィールドのバイト長を省略した場合は,境界調整は指定できません。
boundaryに指定できる値
意味
省略
境界調整をしない。
H
2バイト境界に調整する。
F
4バイト境界に調整する。
D
8バイト境界に調整する。
-
- レコード編集後のレコード長の指定
-
レコード編集後のレコード長を-outfileパラメタのreclenオペランドおよびminlenオペランドに指定します。
各オペランドの形式については,「5.10.3 reclenオペランド」および「5.10.4 minlenオペランド」を参照してください。
レコード編集とreclenオペランドおよびminlenオペランドとの関係を次の表に示します。
表5‒15 レコード編集とreclenオペランドおよびminlenオペランドとの関係 入力ファイル編成
条件(レコード編集後のレコード長とreclen,minlenオペランドとの関係)
レコード編集結果
固定長順
reclen < 編集レコード長
×(KBLS1512-E)
reclen = 編集レコード長
○
reclen > 編集レコード長
×(KBLS1512-E)
可変長順
minlen > 編集レコード長
×(KBLS1513-E)
minlen ≦ 編集レコード長 ≦ reclen
○
編集レコード長 > reclen
×(KBLS1511-E)
テキスト
minlen > 編集レコード長
×(KBLS1513-E)
minlen ≦ 編集レコード長 ≦ reclen
○
編集レコード長 > reclen
×(KBLS1511-E)
- 指定例
-
入力レコード形式が可変長レコード(最小レコード長12バイト,最大レコード長28バイト)で,-locatajstパラメタを指定した場合,および-locatajstパラメタを指定しない場合の指定例を示します。
指定例はexsortパラメタファイルに指定した場合です。exsortコマンドに指定する場合は,フォーマット全体をダブルクォーテーションで囲んでください。
- -locatajstパラメタを指定した場合の例(入力データのエンコードに「SJIS」を指定)
-
-locatajst -inpfile fileorg=V reorg=+1-6 +9-4D +X'FF'-3 21+17 file=INFILE -outfile minlen=16 reclen=32 file=OUTFILE
-
入力レコード長
最小レコード長=12バイト,最大レコード長=28バイト(RDWの長さは含まない)
-
編集フィールド1
1〜6バイトの範囲をレコード先頭に挿入します。レコードの前の4バイト領域(RDW)の先頭を1バイト目とします。
-
編集フィールド2
9〜12バイトの範囲を編集フィールド1に隣接して挿入します。8バイト境界調整で生じた間隔には,NULLが挿入されます。
-
挿入データ
X'FF'のデータを編集フィールド2に隣接して3バイト挿入します。
-
編集フィールド3
可変長部分(最大16バイト)を21バイト目に挿入します。挿入データとの間に生じた間隔には,空白が挿入されます。
入力レコード長が最小レコード長の場合は,可変長部分はありません(0バイト)。入力レコード長が最大レコード長の場合は,可変長部分は16バイトです。
編集後のレコード長は,最小レコード長16バイト,最大レコード長32バイトとなります(RDWの長さ4バイトは含みません)。
-
- -locatajstパラメタを指定しない場合の例(入力データのエンコードに「SJIS」を指定)
-
-inpfile fileorg=V reorg=+0-2 +4-4D +X'FF'-3 16+12 file=INFILE -outfile minlen=16 reclen=32 file=OUTFILE
-
入力レコード長
最小レコード長=12バイト,最大レコード長=28バイト
-
編集フィールド1
0〜2バイトの範囲をレコード先頭に挿入する。
-
編集フィールド2
4〜7バイトの範囲を,編集フィールド1に隣接して挿入します。8バイト境界調整で生じた間隔には,NULLが挿入されます。
-
挿入データ
X'FF'のデータを,編集フィールド2に隣接して3バイト挿入します。
-
編集フィールド3
可変長部分(最大16バイト)を16バイト目に挿入します。挿入データとの間に生じた間隔には,空白が挿入されます。
入力レコード長が最小レコード長の場合は,可変長部分はありません(0バイト)。入力レコード長が最大レコード長の場合は,可変長部分は16バイトです。
編集後のレコード長は,最小レコード長16バイト,最大レコード長32バイトとなります。
-
- 注意事項
-
-
編集機能を使用する場合,-outfileパラメタのreclenオペランド,およびminlenオペランドの指定が必須となる場合があります。出力ファイルのファイル編成と-outfileパラメタのreclenオペランドおよびminlenオペランドの関係を次の表に示します。
表5‒16 出力ファイルのファイル編成とreclenオペランドおよびminlenオペランドとの関係 出力ファイル
reclenオペランド
minlenオペランド
可変長順編成ファイル
◎(指定しない場合,KBLS1659-Eエラーとなる)
◎(指定しない場合,KBLS1660-Eエラーとなる)
固定長順編成ファイル
◎(指定しない場合,KBLS1659-Eエラーとなる)
×(指定している場合,KBLS1664-Eエラーとなる)
テキストファイル
○(指定しない場合,65,535を仮定する)
○(指定しない場合,1を仮定する)
(凡例)
◎:指定必須です。
○:指定できます。
×:指定できません。
-
可変長レコードの場合,-locatajstパラメタを指定したかどうかによって,レコードの先頭位置が異なります。これに伴って,境界調整時の8バイト境界の位置も次の例のように変わります。
-locatajstパラメタを指定している場合
-locatajstパラメタを指定しない場合
-
-locatajstパラメタを指定し入力ファイルが可変長順編成ファイルの場合,先頭のフォーマットだけは,レコードの前の4バイト領域(RDW)を指定してもエラーになりません。先頭より後のフォーマットにこの領域を指定するとKBLS1515-Eエラーとなります。レコードの前の4バイト領域(RDW)を指定する場合は,次のどれかの形式で指定してください。
・1+1-n(nは4以上)
・+1-n(nは4以上)
・1+1
・+1
ここで示した形式以外を指定すると次に示すエラーになります。
指定例
出力される
エラーメッセージ
エラー原因
2+1-4
KBLS1500-E
開始バイト位置の値が1ではありません。
1+2-4
KBLS1503-E
データ位置の値が1ではありません。
1+1-3
KBLS1505-E
データ長の値が4以上ではありません。
-
-
挿入データを指定する場合,挿入開始バイト位置にレコードの前の4バイト領域(RDW)を指定できません。指定した場合,KBLS1515-Eエラーとなります。
-
挿入開始バイト位置は,フォーマット間で昇順となるように指定してください。昇順となっていない場合,KBLS1501-Eエラーとなります。
指定例を次に示します。
正しい指定例:10+1-5 20+10-5
誤った指定例:20+1-5 10+10-5(最初の挿入位置(20)と次の挿入位置(10)が逆転している)
-
入力ファイルがテキストの場合,改行を入力ファイルに合わせて付加します。
-
開始バイト位置や編集フィールド長の指定によっては,入力データと異なる形式(例えば,漢字が漢字でなくなる,符号付き数字が符号なし数字となるなど)となることがあります。このことを考慮に入れて,開始バイト位置や編集フィールド長の値を設定してください。
-
「-outfileパラメタ」の「formatオペランド」と同時に指定できません。同時に指定した場合はKBLS2388-Eエラーとなります。
-
入力ファイルパラメタ(-inpfile,-catinp,-splitinpパラメタ)の「reorgオペランド」および「-reorgパラメタ」は,環境変数「EXSORT64MAXRECLEN」と同時に指定できません。同時に指定した場合はKBLS1107-Eエラーとなります。
-