ページのトップに戻る
PowerSORT V6.0  ユーザーズガイド

7.5.4 BSKEY構造体

BSKEY構造体は、個々のキーフィールドを定義するための構造体です。

typedef struct {
    unsigned __int64    key_position;
    unsigned __int64    key_length;
    unsigned char       key_type;
    unsigned char       key_order;
    unsigned char       key_option;
    unsigned char       key_option2;
    unsigned char       reserve[4]      /* reserved */
    BSPTR_VOID          subfield_addr;
} BSKEY;

BSKEY構造体メンバー

以下では、BSKEY構造体のメンバーについて説明します。

unsigned __int64    key_position

キーフィールドの位置を指定します。
バイナリファイルとテキストファイル固定フィールド指定の場合は、レコードの先頭を0としたバイト位置を指定します。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合は、0から数えたフィールド番号を指定します。

unsigned __int64    key_length

キーフィールドの長さをバイト数で指定します。
テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、実際のフィールド長で処理します。
キーフィールドのデータ形式(key_type)に符号なし2進数(BSKEY_BIT)を指定する場合は、1バイト分のビットを選択するためのマスク値を指定します。この場合、key_positionの位置にある1バイトのフィールド値とマスク値の論理積がキー値になります。
指定可能な各データ形式の長さについては、2.6.4.1 キーフィールドに指定可能なデータ形式を参照してください。

注意

テキストファイルCSV形式、およびテキストファイルTSV形式の場合、フィールドを囲むダブルクォーテーション( " )は、キーフィールドの長さに含みません。また、ダブルクォーテーション( " )で囲まれたフィールド内の2つ連続したダブルクォーテーション( "" )は、1つのダブルクォーテーション( " )として長さを計算します。

例) テキストファイルCSV形式における、キーフィールドと長さ
キーフィールド        キーフィールドとして有効な文字        キーフィールドの長さ
ABC                   ABC                                   3バイト
"ABC"                 ABC                                   3バイト
"A""B""C"             A"B"C                                 5バイト
"A,B,C"               A,B,C                                 5バイト

unsigned char    key_type

キーフィールドのデータ形式を指定します。
指定可能なデータ形式については、2.6.4.1 キーフィールドに指定可能なデータ形式を参照してください。

unsigned char    key_order

キーフィールドの並び順を指定します。
以下のいずれかを指定します。

定義値

意味

BS_ASCND

昇順を示します。(省略値)

BS_REVRS

降順を示します。

unsigned char    key_option

キーフィールドの操作を指定します。
指定可能な操作を以下に示します。テキストファイルのときに有効です。複数の操作を指定する場合は、その論理和を指定します。

定義値

意味

BSOPT_BLANK

キーフィールドの先頭の空白とタブを無視します。

BSOPT_DICTIONARY

空白と英数字だけを比較の対象とします。

BSOPT_IGNORE

制御文字コードを無視します。

BSOPT_JUMBO

英小文字を英大文字として比較します。

BSOPT_NUMERIC

符号を含んだ数字の文字列を算術的な値で比較します。
文字列中に数字以外の文字が存在した場合の結果は保証されません。データ形式がASCIIコード、EBCDICコード、Unicode UCS-2形式、またはUnicode UTF-8形式の場合に指定できます。
BSOPT_CHARNUM、およびkey_option2のBSOPT2_WCHRとは排他関係にあります。

BSOPT_CHARNUM

英字と数字の連結データ(例えば「data123」など)を英字と数値に分けて評価し並べます。
英字だけを比較の対象として比較後、数字だけの文字列を算術的な値で比較します。指定フィールドの左から評価し、有効データ後に出現したデータは無視します。データ形式がASCIIコード、EBCDICコード、Unicode UCS-2形式、またはUnicode UTF-8形式の場合に指定できます。
BSOPT_NUMERIC、およびkey_option2のBSOPT2_WCHRとは排他関係にあります。

注意

  • キーフィールドのデータ形式に照合順序変更(BSKEY_COL)を指定した場合、key_optionの指定はできません。

  • キーフィールドのデータ形式に文字形式2桁年号(BSKEY_YYC)を指定した場合、key_optionの指定は無視されます。

unsigned char    key_option2

複数バイトで表現される文字の文字列を文字単位に比較する場合の操作を指定します。
ここで指定する定義値は、key_optionのBSOPT_NUMERIC、およびBSOPT_CHARNUMとは排他関係にあります。必要に応じて以下を指定します。

定義値

意味

BSOPT2_WCHR

複数バイトから成る文字が混在していても文字ごとに比較して並べます。
データ形式がASCIIコード、シフトJISコード、Unicode UCS-2形式、またはUnicode UTF-8形式で、入力ファイルのコード系(BSRTPRIM構造体のcdmode)がEBCDICコード系以外の場合に有効です。

BSPTR_VOID    subfield_addr

照合順序変更機能を使用する場合に指定します。

参考

バイナリファイルの可変長レコード形式、またはテキストファイルの場合、キーフィールドが存在しないレコードが入力されたときは、キーフィールドが存在しない部分の値を0とみなして処理します。