- 意味
- 入力レコード編集フォーマットを指定します。
- 入力レコード中の編集する範囲(以降,編集フィールドと呼びます)を指定した位置に置くことで,レコード形式を再編成する機能です。
- 編集フィールドは,指定した順序に従って,順に前の編集フィールドの後方に隣接して置かれます。次の図に示すように,編集フィールドの一部または全部が重なり合う指定もできます。
図5-6 編集フィールドの指定例
![[図データ]](figure/zx010180.gif)
- 固定長レコードの場合は,編集フィールドがレコード内にすべて含まれている必要があります。
- また可変長レコードの場合は,編集フィールドのバイト長を指定しなかった編集フィールドを除き,編集フィールドが実レコード内にすべて含まれている必要があります。
- 編集フィールドの指定例を次に示します。
(a) 固定長レコードの場合の例
例1:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長≦レコード長
例2:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長>レコード長
例3:開始バイト位置=レコード長
例4:開始バイト位置>レコード長
図5-7 固定長レコードの場合の指定例
![[図データ]](figure/zx010190.gif)
(b) 可変長レコードおよびテキストの場合の例
- (1)編集フィールド長が指定されている場合
- 例1:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長≦レコード長
- 例2:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長>レコード長
- 例3:開始バイト位置=レコード長
- 例4:開始バイト位置>レコード長
図5-8 可変長レコードおよびテキストの場合の指定例(編集フィールド長指定あり)
![[図データ]](figure/zx010200.gif)
- (2)編集フィールド長が指定されていない場合
- 例1:開始バイト位置≦レコード長-1
- 例2:開始バイト位置=レコード長
- 例3:開始バイト位置>レコード長
図5-9 可変長レコードおよびテキストの場合の指定例(編集フィールド長指定なし)
![[図データ]](figure/zx010210.gif)
- 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) |
- 注※1
- レコードの前の4バイト領域(RDW:レコードヘッダ)の先頭が1となります。
- 注※2
- 入力レコードの改行文字については,「5.8.7 recsepaオペランド」を参照してください。また,入力データのエンコードについては,「5.8.13 codetypeオペランド」を参照してください。
-
- 注※3
- 2の倍数(-locatajstパラメタを同時に指定している場合は「2の倍数+1」)以外を指定すると,KBLS1500-Eメッセージが表示されてエラーになります。
-
- 注※4
- 4の倍数(-locatajstパラメタを同時に指定している場合は「4の倍数+1」)以外を指定すると,KBLS1500-Eメッセージが表示されてエラーになります。
- 2番目以降の編集フィールドの挿入開始バイト位置を省略した場合,直前の編集フィールドに隣接して配置します。
- 先頭の編集フィールドの挿入開始バイト位置を省略した場合,挿入開始バイト位置の仮定値を次の表に示します。
ファイル編成 | -locatajstパラメタ |
---|
指定あり | 指定なし |
---|
固定長順編成ファイル | 1 | 0 |
可変長順編成ファイル | 1または5※ | 0 |
テキストファイル | 1 | 0 |
- 注※
- 編集フィールドのデータ位置(+pos)に1を指定した場合は1を仮定し,1以外を指定した場合は5を仮定します。
- +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) |
- 注※1
- 入力レコードの改行文字については,「5.8.7 recsepaオペランド」を参照してください。また,入力データのエンコードについては,「5.8.13 codetypeオペランド」を参照してください。
-
- 注※2
- 2の倍数以外を指定すると,KBLS1505-Eメッセージが表示されてエラーになります。
-
- 注※3
- 4の倍数以外を指定すると,KBLS1505-Eメッセージが表示されてエラーになります。
- +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桁以内の数字で指定します。
- この設定は省略できません。ただし,「挿入データのバイト長※×繰り返し回数」の値は,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-11 レコード編集と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バイトは含みません)。
![[図データ]](figure/zx010220.gif)
- -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バイトとなります。
![[図データ]](figure/zx010230.gif)
- 注意事項