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 | 符号を含んだ数字の文字列を算術的な値で比較します。 |
BSOPT_CHARNUM | 英字と数字の連結データ(例えば「data123」など)を英字と数値に分けて評価し並べます。 |
注意
キーフィールドのデータ形式に照合順序変更(BSKEY_COL)を指定した場合、key_optionの指定はできません。
キーフィールドのデータ形式に文字形式2桁年号(BSKEY_YYC)を指定した場合、key_optionの指定は無視されます。
key_option2
複数バイトで表現される文字の文字列を文字単位に比較する場合の操作を指定します。
ここで指定する定義値は、key_optionのBSOPT_NUMERIC、およびBSOPT_CHARNUMとは排他関係にあります。必要に応じて以下を指定します。
定義値 | 意味 |
---|---|
BSOPT2_LOCALE | 環境変数LC_COLLATEで定義した照合順序で比較します。 |
注意
キーフィールドのデータ形式に照合順序変更(BSKEY_COL)を指定した場合、key_option2の指定はできません。
キーフィールドのデータ形式に文字形式2桁年号(BSKEY_YYC)、外部10進形式2桁年号(BSKEY_YYZ)、内部10進形式2桁年号(BSKEY_YYP)、および10進形式2桁年号(BSKEY_YYD)を指定した場合、key_option2の指定は無視されます。
subfield_addr
照合順序変更機能を使用する場合に指定します。
照合順序変更機能を使用する場合は、照合順序変更を定義したBSCOL構造体のアドレスを指定します。照合順序変更機能は、BSKEY構造体のkey_typeにBSKEY_COLが指定されている場合に利用できます。
参考
バイナリファイルの可変長レコード形式、またはテキストファイルの場合、キーフィールドが存在しないレコードが入力されたときは、キーフィールドが存在しない部分の値を0とみなして処理します。
ここに記載した「キーフィールドが存在しないレコード」とは、指定されたキーフィールドにデータが存在しないレコードを意味します。
例1) バイナリファイル可変長レコード形式、テキストファイル固定フィールド指定の場合
キーフィールドの指定が「6.4asca」のとき 0123456789 : キーフィールドが存在するレコード 012345 : キーフィールドが存在しないレコード
例2) テキストファイル浮動フィールド指定、CSV形式、TSV形式の場合
キーフィールドの指定が「2.1asca」のとき(ここではフィールドの区切りをカンマ(,)で表します) fld0,fld1,fld2,fld3 : キーフィールドが存在するレコード fld0,fld1 : キーフィールドが存在しないレコード fld0,fld1,,fld3 : キーフィールドが存在しないレコード