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の順番は変わりません。
-