ソートマージ

[目次][用語][索引][前へ][次へ]

5.8.14 reorgオペランド

意味
入力レコード編集フォーマットを指定します。
入力レコード中の編集する範囲(以降,編集フィールドと呼びます)を指定した位置に置くことで,レコード形式を再編成する機能です。
編集フィールドは,指定した順序に従って,順に前の編集フィールドの後方に隣接して置かれます。次の図に示すように,編集フィールドの一部または全部が重なり合う指定もできます。

図5-6 編集フィールドの指定例

[図データ]
固定長レコードの場合は,編集フィールドがレコード内にすべて含まれている必要があります。
また可変長レコードの場合は,編集フィールドのバイト長を指定しなかった編集フィールドを除き,編集フィールドが実レコード内にすべて含まれている必要があります。
編集フィールドの指定例を次に示します。
(a) 固定長レコードの場合の例

例1:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長≦レコード長

例2:開始バイト位置<レコード長,かつ開始バイト位置+編集フィールド長>レコード長

例3:開始バイト位置=レコード長

例4:開始バイト位置>レコード長

図5-7 固定長レコードの場合の指定例

[図データ]

(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]+insertdatacnt
挿入データ形式および挿入位置を指定します。
  • [insertpos]+insertdatacntは必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。
  • [insertpos]+insertdatacntを複数指定する場合は,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バイトは含みません)。

    [図データ]

-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-12 出力ファイルのファイル編成と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)が逆転している)
  • 入力ファイルがテキストの場合,改行を入力ファイルに合わせて付加します。
  • 開始バイト位置や編集フィールド長の指定によっては,入力データと異なる形式(例えば,漢字が漢字でなくなる,符号付き数字が符号なし数字となるなど)となることがあります。このことを考慮に入れて,開始バイト位置や編集フィールド長の値を設定してください。