ページの先頭行へ戻る
PowerSORT (64bit) V8.0 ユーザーズガイド
FUJITSU Software

6.5.4 BSKEY構造体

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

typedef struct {
    unsigned long    key_position;
    unsigned long    key_length;
    unsigned char    key_type;
    unsigned char    key_order;
    unsigned char    key_option;
    unsigned char    key_option2;
    BSPTR_VOID       subfield_addr;
} BSKEY;

BSKEY構造体メンバー

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

key_position

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

key_length

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

key_type

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

key_order

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

定義値

意味

BS_ASCND

昇順に並べます。(省略値)

BS_REVRS

降順に並べます。

key_option

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

定義値

意味

BSOPT_BLANK

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

BSOPT_DICTIONARY

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

BSOPT_IGNORE

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

BSOPT_JUMBO

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

BSOPT_NUMERIC

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

BSOPT_CHARNUM

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

注意

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

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

key_option2

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

定義値

意味

BSOPT2_LOCALE

環境変数LC_COLLATEで定義した照合順序で比較します。
データ形式がASCIIコード、EUCファイルコード、EUC2バイトプロセスコード、EUC4バイトプロセスコード、またはUnicode UTF-8形式で、入力ファイルのコード系(BSRTPRIM構造体のcdmode)がEBCDICコード系以外の場合に有効です。

注意

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

  • キーフィールドのデータ形式に文字形式2桁年号(BSKEY_YYC)、外部10進形式2桁年号(BSKEY_YYZ)、内部10進形式2桁年号(BSKEY_YYP)、および10進形式2桁年号(BSKEY_YYD)を指定した場合、key_option2の指定は無視されます。

subfield_addr

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


参考

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

例1) バイナリファイル可変長レコード形式、テキストファイル固定フィールド指定の場合

キーフィールドの指定が「6.4asca」のとき

  0123456789   : キーフィールドが存在するレコード
  012345       : キーフィールドが存在しないレコード

例2) テキストファイル浮動フィールド指定、CSV形式、TSV形式の場合

キーフィールドの指定が「2.1asca」のとき(ここではフィールドの区切りをカンマ(,)で表します)

  fld0,fld1,fld2,fld3   : キーフィールドが存在するレコード
  fld0,fld1             : キーフィールドが存在しないレコード
  fld0,fld1,,fld3       : キーフィールドが存在しないレコード