ソートマージ


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桁以内の数字で指定します。

  • +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エラーとなります。