ソートマージ


5.5.11 キー位置のチェックオプション(POSNOCHKオプション)

可変長順編成ファイルのキーの指定範囲が最小レコード長を超えていてもエラーにしません。また,テキストファイルのキーの指定範囲が実レコード長を超えていてもエラーにしません。

実レコード長を超えたキー部分には,NULL値(0x00)を仮定してキーを比較します。

このオプションを指定しない場合,環境変数「EXSORTMGTOPT(64ビット版は「EXSORT64MGTOPT」)」にVKEY_POS_NOCHKオプションが指定されていればPOSNOCHK指定ありと同じ扱いとなります。

注意事項
  • キー属性に外部10進数または内部10進数を指定した場合に,仮定したNULL値が不正データとして扱われないように,KEYNOCHKオプションの指定を推奨します。

  • テキストファイルの場合,入力レコード中の改行文字は,入力データおよびキーとして扱いません。キーの範囲内の改行文字については,NULL値を仮定します。

  • CSVファイルの場合は,POSNOCHKの指定に関係なく次のとおりに扱います。

    -csvkeyパラメタに指定した入力セルのデータがない場合,NULLセル(nullキー)として扱います。

    -csvkeyパラメタに指定した有効桁数が不足している場合,桁数を調整します。詳細については,「付録D CSVファイル内のNULLセルの扱い(SORT EEの機能)」を参照してください。

POSNOCHKオプションのキーの扱いについて次の表に示します。

POSNOCHK

キーの扱い

指定なし

可変長順編成ファイルのキーの範囲が最小レコード長を超えている場合,KBLS1208-Eメッセージを表示し,exsortコマンドが異常終了します。

テキストファイルのキーの範囲が実レコード長を超えている場合,KBLS1208-Eメッセージを表示し,exsortコマンドが異常終了します。

指定あり※1

1. キー位置+キー長が実レコード長以下の場合

実レコード内のキーが,ソートキー,マージキー,または集約キーとなります。

2. キー位置が実レコード長より小さく,キー位置+キー長が実レコード長より大きく最大レコード長以下の場合

3. キー位置が実レコード長より小さく,キー位置+キー長が最大レコード長より大きい場合

実レコード内のキーと,実レコードを超えている部分にNULL値を仮定したキーがソートキー,マージキー,または集約キーとなります。

4. キー位置が実レコード長より大きく,キー位置+キー長が最大レコード長以下の場合

5. キー位置が最大レコード長より小さく,キー位置+キー長が最大レコード長より大きい場合

6. キー位置が最大レコード長より大きい場合

NULL値を仮定したキーが,ソートキー,マージキー,または集約キーとなります。

(凡例)

レコード長※2

可変長順編成ファイル

テキストファイル

最小レコード長

COBOLでファイル作成時にユーザが指定した最小レコード長

1

実レコード長

実際の入力レコード長

実際の入力レコード長(改行文字を除く)

最大レコード長

COBOLでファイル作成時にユーザが指定した最大レコード長

入力ファイルパラメタ(-inpfile,-splitinp,-catinp,または-joininpパラメタ)のreclenオペランドで指定したレコード長(改行文字を除く)※3

注※1

1.〜6.は,次の図の1.〜6.に対応しています。

[図データ]

注※2

入力レコード編集(-inpfile,-splitinpまたは-catinpパラメタのreorgオペランド)を指定した場合は,入力レコード編集後のレコード長となります。

注※3

入力ファイルパラメタ(-inpfile,-splitinp,-catinp,または-joininpパラメタ)のreclenオペランドを省略した場合,入力データの最大レコード長は,レコード長の上限値が設定されます。

設定される入力データの最大レコード長については,「5.8.3 reclenオペランド」および「14.1.4 最大レコード長設定の優先順位」を参照してください。

指定例

-cmdopt POSNOCHKオプションを指定したソート機能実行の例です(環境変数「EXSORT64MAXRECLEN」の指定なし)。

網掛けは,入力レコード(実際のレコード)の範囲を示します。「LF」は,改行文字を示します。

[図データ]

【例1】キーの範囲が最小レコード長以下の場合

(exsortコマンド指定内容)

-cmdopt POSNOCHK:DUP:重複レコードの入力順序保存機能を指定

-key c+0-4:キー位置+0〜3 キー長4バイト 昇順ソート

-inpfile fileorg=A reclen=8:テキストファイル(最大レコード長8バイト)

[図データ]

  • 重複レコードの入力順序保存機能の指定によって,レコード2〜6の順番は変わりません。

  • キーの範囲は最小レコード長以下なので,POSNOCHK指定なしと同じソート結果となります。

【例2】キー位置が最小レコード長より小さく,キー位置+キー長が最大レコード長以下の場合

(exsortコマンド指定内容)

-cmdopt POSNOCHK:DUP:重複レコードの入力順序保存機能を指定

-key c+2-4:キー位置+2〜5 キー長4バイト 昇順ソート

-inpfile fileorg=A reclen=8:テキストファイル(最大レコード長8バイト)

[図データ]

  • 重複レコードの入力順序保存機能の指定によって,レコード4〜6の順番は変わりません。

【例3】キー位置が最小レコード長より小さく,キー位置+キー長が最大レコード長より大きい場合

(exsortコマンド指定内容)

-cmdopt POSNOCHK

-key c+2-8:キー位置+2〜9 キー長8バイト 昇順ソート

-inpfile fileorg=A reclen=8:テキストファイル(最大レコード長8バイト)

[図データ]

【例4】キー位置が最小レコード長より大きく,キー位置+キー長が最大レコード長以下の場合

(exsortコマンド指定内容)

-cmdopt POSNOCHK

-key c+2-6:キー位置+4〜9 キー長6バイト 昇順ソート

-inpfile fileorg=A:テキストファイル(最大レコード長65,535バイトを仮定)

[図データ]

【例5】キー位置が最大レコード長より小さく,キー位置+キー長が最大レコード長より大きい場合

(exsortコマンド指定内容)

-cmdopt POSNOCHK:DUP:重複レコードの入力順序保存機能を指定

-key c+6-4:キー位置+6〜9 キー長4バイト 昇順ソート

-inpfile fileorg=A:テキストファイル(最大レコード長65,535バイトを仮定)

[図データ]

  • 重複レコードの入力順序保存機能の指定によって,レコード4〜6の順番は変わりません。

【例6】キー範囲が最大レコード長より大きい場合

(exsortコマンド指定内容)

-cmdopt POSNOCHK:DUP:重複レコードの入力順序保存機能を指定

-key c+8-4088:キー位置+8〜4,095 キー長4,088バイト 昇順ソート

-inpfile fileorg=A:テキストファイル(最大レコード長65,535バイトを仮定)

[図データ]

  • 重複レコードの入力順序保存機能の指定によって,レコード1〜6の順番は変わりません。