ソートマージ

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

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

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

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

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

注意事項
  • キー属性に外部10進数または内部10進数を指定した場合に,仮定したNULL値が不正データとして扱われないように,KEYNOCHKオプションの指定を推奨します。
  • テキストファイルの場合,入力レコード中の改行文字は,入力データおよびキーとして扱いません。キーの範囲内の改行文字については,NULL値を仮定します。
  • CSVファイルの場合は,POSNOCHKの指定に関係なく次のとおりに扱います。
    -csvkeyパラメタに指定した入力セルのデータがない場合,ナル文字列(nullキー)として扱います。
    -csvkeyパラメタに指定した有効桁数が不足している場合,桁数を調整します。詳細については,「付録D CSVファイル内のナル文字列の扱い(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パラメタのreclenオペランドで指定したレコード長(改行文字を除く)※3

注※1
1.〜6.は,次の図の1.〜6.に対応しています。
[図データ]

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

注※3
-inpfile,-splitinpまたは-catinpパラメタのreclenオペランドを省略した場合,入力ファイルの改行文字の種別がLFのときは65,535を,CRLFのときは65,534をreclenに仮定します。
入力ファイルの改行文字の種別は,-inpfile,-splitinp,または-catinpパラメタのrecsepaオペランド,または環境ファイル「EXS_RECSEPA」で指定します。詳細は,「5.8.7 recsepaオペランド」を参照してください。

指定例
-cmdopt POSNOCHKオプションを指定したソート機能実行の例です。
網掛けは,入力レコード(実際のレコード)の範囲を示します。「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の順番は変わりません。