ソートマージ


5.6 -keyパラメタ

意味

ソートキー,マージキー,または集約キーを指定します。

形式
-key key-definition [△key-definition … ]
説明
  • -functionパラメタにsortまたはmergeを指定した場合,もしくは-sumパラメタを指定した場合は,このパラメタを必ず指定してください。

  • ソート機能では,重複レコードの入力順序保存機能(-cmdopt DUP)を指定することで,重複キーのレコードを入力順に並べて出力できます。重複レコードの入力順序保存機能については,「5.5.1 重複レコードの入力順序保存機能(DUP|NODUPオプション)」を参照してください。

  • マージおよびコピー機能では,重複キーのレコードは入力順に並べて出力されます。

  • キーを複数指定した場合,キーの指定順によってソートまたはマージの優先順位が決まります。先に指定したキーほど優先順位が高く,あとに指定したキーほど優先順位が低くなります。

  • キー同士の範囲は重なってもかまいません。

  • キーの範囲は,集約項目の範囲と重なってはいけません。

  • 指定できるキーの個数と合計長は,環境ファイル「EXS_KEYNUMMAX」で指定できます。なお,キーの合計長は,入力データのエンコードによって異なります。環境ファイル「EXS_KEYNUMMAX」については,「15.1.1(14) EXS_KEYNUMMAX」を参照してください。

指定値

key-definitionの形式を次に示します。

key-definition形式1
[r]key-attributeposlen
  • [r]key-attributeposlenは必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。

  • [r]key-attributeposlenを複数指定する場合は,1個以上の空白またはタブで区切って指定します。

  • key-attributeには,属性コード「j,c,n,m,p,z,x,s,t,f,g,q,d,w,u,v」が指定できます。

key-definition形式2
[r]key-attributeposmaskbit
  • [r]key-attributeposmaskbitは必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。

  • [r]key-attributeposmaskbitを複数指定する場合は,1個以上の空白,またはタブで区切って指定します。

  • key-attributeには,属性コード「a,b」が指定できます。

key-definition形式3
field-name
  • field-nameを複数指定する場合は,1個以上の空白,またはタブで区切って指定します。

key-definitionに指定するそれぞれの値について次に示します。

[r]

キーのソート順序を指定します。

rオプション

意味

指定なし

キーの昇順でソートまたはマージします。

指定あり

キーの降順でソートまたはマージします。

  • 降順でソートまたはマージする場合は,キーの属性を「rc」のようにつなげて指定します。

  • 昇順か降順かは,キーごとに指定します。キーを複数指定して,昇順と降順を混在させたソートまたはマージもできます。

key-attribute

キーの属性を指定します。

key-attributeに指定する値

意味

key-definition

形式

j

キーが文字(JIS8単位コード※1)であることを指定します。

形式1

c

キーが文字であることを指定します。※3

形式1

n

キーが符号付き固定小数点2進数であることを指定します。※9,※10

形式1

m

キーが符号なし2進数(0から始まる整数)であることを指定します。※9,※10

形式1

a

キーが符号なし2進数(0から始まる整数)であることを指定します。※9,※10

(マスクビットで指定するビット単位のキーです)

形式2

b

キーが符号なし2進数(バイトデータ)であることを指定します。※10

(マスクビットで指定するビット単位のキーです)

形式2

p

キーが内部10進数であることを指定します。

形式1

z

キーが外部10進数であることを指定します。※5

形式1

x

キーが左符号付き外部10進数であることを指定します。※5

形式1

s

キーが右分離符号付き外部10進数であることを指定します。※5

形式1

t

キーが左分離符号付き外部10進数であることを指定します。※5

形式1

f

キーが内部浮動小数点であることを指定します。※9,※10

形式1

g

キーが日付(英数字)であることを指定します。※5

形式1

q

キーが文字(文字順序変更機能※2で指定した文字)であることを指定します。※3

形式1

d

キーが文字(左分離符号付き数字)であることを指定します。※5

形式1

w

キーが文字(ワイド文字※4,※6)であることを指定します(テキストファイルだけ指定できます)。

形式1

u

キーが文字(マルチバイト文字※6,※7,※8)であることを指定します(テキストファイルだけ指定できます)。

形式1

v

キーが文字(マルチバイト文字※6,※7,※8)であることを指定します(UnicodeのIVSに対応した属性で,テキストファイルだけ指定できます)。

形式1

注※1

ASCIIコード(0x00〜0x7F)を含む,JIS8単位コード(0x00〜0xFF)を意味します。

入力データに日本語などのマルチバイト文字が含まれている場合,マルチバイト文字としてではなく,シングルバイト文字として扱われます。

EBCDIKコードの体系に従ってキーを比較するEBCDIKコード比較オプション機能を使用できます。EBCDIKコード比較オプション機能については,「5.5.3 EBCDIKコード比較オプション(EBCJ,EBCEオプション)」を参照してください。

注※2

文字順序変更機能については,「5.15 -altseqパラメタ」を参照してください。

注※3

入力データのエンコードの種別には対応しません。入力データの文字を構成するバイト長を意識しないで,常に1バイト長のシングルバイト文字として扱います。ASCIIコードやJIS8単位コード向けの属性です。

注※4

入力データのエンコードに「UCS-2LE」,「UCS-2BE」,「UTF-16LE」,「UTF-16BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-16LEまたはUTF-16BE)」を指定した場合,1文字2バイトのワイド文字として扱います。またサロゲートペア文字は2文字として扱います。

入力データのエンコードに「UCS-4LE」,「UCS-4BE」,「UTF-32LE」,「UTF-32BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-32LEまたはUTF-32BE)」を指定した場合,1文字4バイトのワイド文字として扱います。

文字のエンコードの指定方法については,「5.8.13 codetypeオペランド」を参照してください。

なお,属性コード「w」は,固定長順編成ファイルと可変長順編成ファイルの入力ファイルに対して指定できません。指定した場合,KBLS1203-Eメッセージが表示されて,エラーになります。

注※5

入力データのエンコードで解釈します。

「ASCII」,「SJIS」,「EUC-JP」,「EUC-HJ」または「UTF-8」を指定した場合は1バイト,「UCS-2LE」,「UCS-2BE」,「UTF-16LE」または「UTF-16BE」を指定した場合は2バイト,「UCS-4LE」,「UCS-4BE」,「UTF-32LE」または「UTF-32BE」を指定した場合は4バイトの長さで文字を扱います。

文字のエンコードの指定方法については,「5.8.13 codetypeオペランド」を参照してください。

注※6

キー範囲の入力データがすべてASCII対応コード(英数字)の場合は,属性コード「c」を指定した方が処理効率が向上します。属性コード「c」は1文字1バイトで扱うため,エンコードに対応したバイト長を指定してください。

ASCII対応コードについては,「付録H Unicode操作文字コード一覧(SORT EE)」を参照してください。

注※7

属性コード「u」と「v」は,入力データのエンコードで解釈します。1文字の長さは可変長として扱います。

文字のエンコードの指定方法については,「5.8.13 codetypeオペランド」を参照してください。また,マルチバイト文字の扱いについては,「付録I.2 文字列データの扱い」を参照してください。

注※8

入力データのエンコードに「UTF-8」,「UTF-16LE」,「UTF-16BE」,「UCS-4LE」,「UCS-4BE」,「UTF-32LE」,「UTF-32BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-16LE,UTF-16BE,UTF-32LEまたはUTF-32BE)」のどれかを指定した場合,UnicodeのIVS(Ideographic Variation Sequence)を次のとおり解釈します。UnicodeのIVSについては,「付録I.2(6) IVS対応」を参照してください。

・属性コード「u」は,UCSコードが一致する文字であれば,UnicodeのIVSの異体字であっても同じ文字として扱います。

・属性コード「v」は,UCSコードが一致する文字であっても,VS(Variation Selector,異体字セレクタ)が異なる場合は,異なる文字として扱います。

注※9

属性コード「n」,「m」,「f」および「a」は,数値として比較するため,バイトオーダーが関係します。バイトオーダーについては,「2.7 エンディアンオプション機能」および「5.5.4 入力ファイルのエンディアンオプション(BIG|INPBIG|INPLTLオプション)」を参照してください。

・符号付き固定小数点数「n」:2バイト(signed short int),4バイト(signed int),8バイト(signed long long int)

・符号なし2進数「m」,「a」:2バイト(unsigned short int),4バイト(unsigned int),8バイト(unsigned long long int)

・内部浮動小数点数「f」:4バイト(float),8バイト(double)

注※10

属性コード「n,m,f」と「a,b」は,どちらも「2進数」データですが,キーの長さの指定方法が異なります。

・属性コード「n」,「m」および「f」は,キーの長さを「バイト長」で指定します。

・属性コード「a」と「b」は,キーの長さ分の「マスクビット」を指定します。

pos
  • キーの開始バイト位置を数字で指定します。指定できる桁数は,レコード長の上限値をバイト単位に変換した値の桁数以内です。

  • -locatajstパラメタを指定したかどうかによって,レコード先頭の解釈が異なります。

  • テキストファイルに指定できる開始バイト位置(pos)の範囲は,UNIXの64ビット版(環境変数「EXSORT64MAXRECLEN」の指定がない,または無効の場合),UNIXの32ビット版,およびWindows版の場合,入力データのエンコード種別や改行文字の長さによって異なります。UNIXの64ビット版で環境変数「EXSORT64MAXRECLEN」の指定がある場合,入力データのエンコード種別によって異なりますが,改行文字の長さによって異なることはありません。

    開始バイト位置(pos)に指定できる値の範囲を次の表に示します。

    表5‒9 posに指定できる値の範囲(Windows版,UNIXの32ビット版,UNIXの64ビット版で環境変数「EXSORT64MAXRECLEN」の指定がない,または指定が無効の場合)

    ファイル編成

    -locatajstパラメタ

    指定あり

    指定なし

    固定長順編成ファイル

    1〜65,535

    0〜65,534

    可変長順編成ファイル

    5〜65,539※1

    0〜65,534

    テキストファイル※2

    改行文字

    「LF」

    ASCII

    SJIS

    EUC-JP

    EUC-HJ

    UTF-8

    1〜65,535

    0〜65,534

    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」)以外を指定すると,KBLS1205-Eメッセージが表示されてエラーになります。

    注※4

    4の倍数(-locatajstパラメタを同時に指定している場合は「4の倍数+1」)以外を指定すると,KBLS1205-Eメッセージが表示されてエラーになります。

    表5‒10 posに指定できる値の範囲(UNIXの64ビット版で環境変数「EXSORT64MAXRECLEN」の指定がある場合)

    ファイル編成

    -locatajstパラメタ

    指定あり

    指定なし

    固定長順編成ファイル

    1〜レコード長の上限値※1

    0〜レコード長の上限値※1−1

    可変長順編成ファイル

    5〜レコード長の上限値※1+4※3

    0〜レコード長の上限値※1−1

    テキストファイル※2

    ASCII

    SJIS

    EUC-JP

    EUC-HJ

    UTF-8

    1〜レコード長の上限値※1

    0〜レコード長の上限値※1−1

    UCS-2LE

    UCS-2BE

    UTF-16LE

    UTF-16BE

    1〜レコード長の上限値※1−1(2の倍数+1)※4

    0〜レコード長の上限値※1−2(2の倍数)※4

    UCS-4LE

    UCS-4BE

    UTF-32LE

    UTF-32BE

    1〜レコード長の上限値※1−3(4の倍数+1)※5

    0〜レコード長の上限値※1−4(4の倍数)※5

    注※1

    レコード長の上限値は,環境変数「EXSORT64MAXRECLEN」に指定した「レコード長の上限値」です。

    環境変数「EXSORT64MAXRECLEN」ついては「14.1 SORT EEの環境変数の設定」を参照してください。

    注※2

    入力データのエンコード種別については「5.8.13 codetypeオペランド」を参照してください。

    注※3

    レコードの前の4バイト領域(RDW:レコードヘッダ)の先頭が1となります。

    注※4

    2の倍数(-locatajstパラメタを同時に指定している場合は「2の倍数+1」)以外を指定すると,KBLS1205-Eメッセージが表示されてエラーになります。

    注※5

    4の倍数(-locatajstパラメタを同時に指定している場合は「4の倍数+1」)以外を指定すると,KBLS1205-Eメッセージが表示されてエラーになります。

len

キーの長さを次の表に示す範囲で指定します。

key-attributeの値

指定できる長さ(単位)

j,c,q,w※1

  • 入力データのエンコードが「ASCII」,「SJIS」,「EUC-JP」,「EUC-HJ」または「UTF-8」の場合

    1〜4,096(バイト)

  • 入力データのエンコードが「UCS-2LE」,「UCS-2BE」,「UTF-16LE」または「UTF-16BE」の場合※2

    2〜8,192(バイト)

  • 入力データのエンコードが「UCS-4LE」,「UCS-4BE」,「UTF-32LE」または「UTF-32BE」の場合※3

    4〜16,384(バイト)

u,v

1〜4,096(文字数)※6

m,n

2,4,または8(バイト)

p

1〜10(バイト)

z,x

1〜18(桁)※4

s,t

2〜19(桁)※4

f

4または8(バイト)

g

2〜8(桁)※5

d

1〜256(桁)※4

注※1

入力データのエンコードの種別によって,マルチバイト文字の長さは異なります。詳細は「付録I.2 文字列データの扱い」を参照してください。

注※2

入力データのエンコードに「UCS-2LE」,「UCS-2BE」,「UTF-16LE」,「UTF-16BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-16LEまたはUTF-16BE)」を指定した場合,長さには「2の倍数」を指定してください。

2の倍数以外を指定すると,KBLS1207-Eメッセージが表示されてエラーになります。

注※3

入力データのエンコードに「UCS-4LE」,「UCS-4BE」,「UTF-32LE」,「UTF-32BE」または「UNICODE(入力ファイルのUnicodeシグニチャ(BOM)の形式がUTF-32LEまたはUTF-32BE)」を指定した場合,長さには「4の倍数」を指定してください。

4の倍数以外を指定すると,KBLS1207-Eメッセージが表示されてエラーになります。

注※4

「バイト長」ではなく数値の「桁数」を指定してください。UCS-2,UCS-4,UTF-16およびUTF-32の数値データの扱いについては,「付録I.3 数値データの扱い」を参照してください。

注※5

「バイト長」ではなく日付の「桁数」を指定してください。UCS-2,UCS-4,UTF-16およびUTF-32の日付データの扱いについては,「付録I.4 日付データの扱い」を参照してください。

注※6

「バイト長」ではなく「文字数」を指定してください。UTF-16のサロゲートペア文字は1文字として扱います。また,UnicodeのVS(Variation Selector,異体字セレクタ)は文字数に数えません。マルチバイト文字の扱いについては,「付録I.2(6) IVS対応」を参照してください。

maskbit
  • 属性コード「a」または「b」を指定した場合,マスクビットを16進数で指定します。

  • 16進数のA〜Fは,小文字・大文字のどちらでも指定できます。

  • キーデータに対して,指定したマスクビットでAND演算を行った結果でソートします。なお,このAND演算によってキーデータが更新されることはありません。

  • マスクビットの16進数は,ビッグエンディアン形式で記述してください。

  • すべての桁を「00」とするマスクビット指定はできません。指定した場合は,KBLS1207-Eエラーとなります。

  • 指定できるマスクビットの桁は次のとおりです。

    key-attribute

    に指定する値

    指定できるmaskbitの桁

    備考

    a

    4,8または16(桁)※1

    キーの長さは2,4または8バイト

    b

    2〜8,192(桁)※2

    キーの長さは1〜4,096バイト

注※1

属性コード「a(符号なし2進数)」は,2バイト(unsigned short int),4バイト(unsigned int),8バイト(unsigned long long int)のキーとして扱います。2,4または8バイトに対応するマスクビット値を,それぞれ4,8または16桁の16進数で指定してください。なお,16進数はビッグエンディアン形式で記述してください。

(例1)ra+0-F000 a+0-0FFF

   第1キーの並び順:降順

   第1キーの範囲:+0〜1の2バイト長

   第1キーのマスクビット:0xF000

   第2キーの並び順:昇順

   第2キーの範囲:+0〜1の2バイト長

   第2キーのマスクビット:0x0FFF

[図データ]

注※2

属性コード「b(符号なし2進数)」は,1〜4,096バイトの範囲を指定できます。マスクビット値を,2〜8,192桁の16進数で指定してください。なお,16進数はビッグエンディアン形式で記述してください。

(例2)rb+0-fff000 a+0-000fff

   第1キーの並び順:降順

   第1キーの範囲:+0〜2の3バイト長

   第1キーのマスクビット:0xfff000

   第2キーの並び順:昇順

   第2キーの範囲:+0〜2の3バイト長

   第2キーのマスクビット:0x000fff

[図データ]

field-name

キーを,入力ファイルパラメタのfieldオペランドで定義したフィールド名で指定します。

  • ファイル編成が可変長順編成ファイルの場合,フィールド名は指定できません。

キーの範囲

キーは,次の範囲内で指定してください。

  • 入力ファイルが固定長順編成ファイルのとき,キーはレコード長の範囲

  • 入力ファイルが可変長順編成ファイルのとき,キーは最小レコード長の範囲※1

  • 入力ファイルがテキストファイルのとき,キーは実レコード長の範囲※1,※2

注※1

可変長順編成ファイルまたはテキストファイルで,-cmdoptパラメタのPOSNOCHKオプションを指定している場合は,最大レコード長の範囲となります。なお,POSNOCHKオプションでは,最大レコード長を超えた範囲をキーとして指定してもエラーになりませんが,最大レコード長を超えた部分のキー値は必ずNULL値(0x00)が仮定されるので注意してください。

-cmdoptパラメタのPOSNOCHKオプションについては,「5.5.11 キー位置のチェックオプション(POSNOCHKオプション)」を参照してください。

注※2

テキストファイルに指定した属性コード「u」または「v」の場合は,キーの指定範囲が実レコード長を超えていてもエラーにはなりません。実レコード長を超えた部分には空白を仮定してキーを比較します。

関連パラメタ・オペランド
  • -locatajstパラメタ

  • -functionパラメタ

  • -sumパラメタ

  • -inpfileパラメタ codetypeオペランド

指定例

【例1】

-key△j+0-4△rc+18-5△p+12-8△rz+6-10

第1キー:0バイト目から長さ4バイト(文字),昇順

第2キー:18バイト目から長さ5バイト(文字),降順

第3キー:12バイト目から長さ8バイト(内部10進数),昇順

第4キー:6バイト目から長さ10バイト(外部10進数),降順

【例2】

-key△b+0-0f△rb+2-f8△a+4-0ff0△ra+8-0000fff0

第1キー:0バイト目から長さ1バイト,マスク 0x0f,昇順

第2キー:2バイト目から長さ1バイト,マスク 0xf8,降順

第3キー:4バイト目から長さ2バイト(unsigned short int),マスク 0x0ff0,昇順

第4キー:8バイト目から長さ4バイト(unsigned int),マスク 0x0000fff0,降順

(凡例)

△:半角スペース(空白)を示します。