BSSELE構造体は、個々の選択フィールドを定義するための構造体です。
typedef struct { unsigned char sele_cmpoprat; unsigned char sele_type1; unsigned char sele_type2; unsigned char sele_option; unsigned char reserve1[4]; /* reserved */ unsigned __int64 sele_position1; unsigned __int64 sele_length1; union { unsigned __int64 sele_position2; BSPTR_UCHAR sele_literal; } pos2; unsigned __int64 sele_length2; unsigned char sele_trueop; unsigned char sele_falseop; unsigned char sele_mask; unsigned char sele_option2; unsigned char reserve2[4]; /* reserved */ unsigned __int64 sele_truejmp; unsigned __int64 sele_falsejmp; BSPTR_VOID subfield_addr; } BSSELE;
BSSELE構造体メンバー
以下では、BSSELE構造体のメンバーについて説明します。
unsigned char sele_cmpoprat
比較演算子を指定します。
以下に比較演算子とその意味を示します。
比較演算子 | 意味(真の条件) |
---|---|
BSCOND_EQ | 被比較フィールド = 比較フィールド、または自己規定値 |
BSCOND_NE | 被比較フィールド ≠ 比較フィールド、または自己規定値 |
BSCOND_GT | 被比較フィールド > 比較フィールド、または自己規定値 |
BSCOND_GE | 被比較フィールド ≧ 比較フィールド、または自己規定値 |
BSCOND_LT | 被比較フィールド < 比較フィールド、または自己規定値 |
BSCOND_LE | 被比較フィールド ≦ 比較フィールド、または自己規定値 |
unsigned char sele_type1
被比較フィールドのデータ形式を指定します。
指定可能なデータ形式については、被比較フィールドと比較フィールドに指定可能なデータ形式を参照してください。
unsigned char sele_type2
比較フィールドのデータ形式を指定します。
指定可能なデータ形式については、被比較フィールドと比較フィールドに指定可能なデータ形式を参照してください。なお、比較フィールドに自己規定値を指定するときは、sele_type2にBS_LITERALを指定します。
注意
被比較フィールドと比較フィールドのデータ形式が異なるときは、被比較フィールドのデータ形式に合わせてから比較します。
被比較フィールドのデータ形式の種類が文字の場合、被比較フィールドと比較フィールドの短い方の長さで比較します。
比較フィールドのデータ形式の種類が数値、または数字の場合、被比較フィールドと比較フィールドの短い方を長い方の長さに合わせて比較します。
unsigned char sele_option
被比較フィールドの操作を指定します。
テキストファイルの場合に有効です。必要に応じて以下を指定します。複数の操作を指定する場合は、その論理和を指定します。
操作 | 意味 |
---|---|
BSOPT_BLANK | フィールドの先頭の空白とタブを無視します。 |
BSOPT_DICTIONARY | 空白と英数字だけを比較の対象とします。 |
BSOPT_IGNORE | 制御文字コードを無視します。 |
BSOPT_JUMBO | 英小文字を英大文字として比較します。 |
BSOPT_NUMERIC | 符号を含んだ数字の文字列を算術的な値で比較します。 |
注意
被比較フィールドのデータ形式に照合順序変更(BSKEY_COL)を指定した場合、sele_optionは指定できません。
unsigned __int64 sele_position1
被比較フィールドの位置を指定します。
バイナリファイルとテキストファイル固定フィールド指定の場合は、レコードの先頭を0としたバイト位置を指定します。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合は、0から数えたフィールド番号を指定します。
unsigned __int64 sele_length1
被比較フィールドの長さをバイト数で指定します。
テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、実際のフィールド長で処理します。
注意
テキストファイル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 __int64 pos2.sele_position2
比較フィールドの位置を指定します。
バイナリファイルとテキストファイル固定フィールド指定の場合は、レコードの先頭を0としたバイト位置を指定します。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合は、0から数えたフィールド番号を指定します。
pos2.sele_literalとは共用体で定義されています。自己規定値を指定するときは、pos2.sele_literalに指定します。
BSPTR_UCHAR pos2.sele_literal
自己規定値のアドレスを指定します。
テキストファイル浮動フィールド指定の場合は、自己規定値にフィールド分離文字列を含むことはできません。
pos2.sele_position2とは共用体で定義されています。自己規定値以外を指定するときは、pos2.sele_position2に指定します。
注意
テキストファイル固定フィールド指定の場合は、自己規定値にレコード分離文字を含むことはできません。
テキストファイル浮動フィールド指定の場合は、自己規定値にフィールド分離文字列、またはレコード分離文字を含むことはできません。
テキストファイルCSV形式、およびテキストファイルTSV形式の場合、自己規定値にフィールドを囲むダブルクォーテーション( " )を指定する必要はありません。
unsigned __int64 sele_length2
比較フィールド、または自己規定値の長さをバイト数で指定します。
テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、実際のフィールド長で処理します。
注意
テキストファイル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 sele_trueop
比較結果が真のときの処理を指定します。
最後のエントリーのsele_trueopとsele_falseopには、比較処理の終りを示す定義値を指定します。比較結果の処理については、以下を参照してください。
処理の種類 | 定義値 | 意味 |
---|---|---|
INCLUDE | BSSEL_INCLUDE | 比較処理の終りとレコードを処理対象とすることを示します。 |
OMIT | BSSEL_OMIT | 比較処理の終りとレコードを処理対象外とすることを示します。 |
次の選択フィールドの処理 | BSSEL_NEXT | 次の比較処理に移ることを示します。 |
指定選択フィールドへ飛ぶ | BSSEL_JUMP | 指定した比較処理に移ることを示します。 |
unsigned char sele_falseop
比較結果が偽のときの処理を指定します。
最後のエントリーのsele_trueopとsele_falseopには、比較処理の終りを示す定義値を指定します。比較結果の処理については、表7.3 比較結果の処理方法を参照してください。
BSPTR_UCHAR sele_mask
サポートしていないメンバーです。
何も指定する必要はありません。
unsigned char sele_option2
複数バイトで表現される文字の文字列を文字単位に比較する場合の操作を指定します。
ここで指定する定義値は、sele_optionのBSOPT_NUMERICとは排他関係にあります。必要に応じて以下を指定します。
定義値 | 意味 |
---|---|
BSOPT2_WCHR | 複数バイトから成る文字が混在していても文字ごとに比較します。 |
unsigned __int64 sele_truejmp
sele_trueopにBSSEL_JUMPを指定したときの飛び先を指定します。
iを指定すると、比較結果が真のときにsele_entry[i]の選択フィールドへ処理が移ります。sele_truejmpには、自身のエントリー番号+1からentry_no-1の範囲の値を指定します。
unsigned __int64 sele_falsejmp
sele_falseopにBSSEL_JUMPを指定したときの飛び先を指定します。
iを指定すると、比較結果が偽のときにsele_entry[i]の選択フィールドへ処理が移ります。sele_falsejmpには、自身のエントリー番号+1からentry_no-1の範囲の値を指定します。
BSPTR_VOID subfield_addr
照合順序変更機能を使用する場合、照合順序変更を定義したBSCOL構造体のアドレスを指定します。
照合順序変更機能は、sele_type1、またはsele_type2にBSKEY_COLが指定されている場合に利用できます。
参考
1つの選択フィールドは、1つの論理式を表現します。このため、複合条件を指定する場合は、複数の選択フィールドを指定する必要があります。以下に、複合条件を満たすレコードを選択する場合の指定方法を示します。
複合条件
(論理式1 ∩ 論理式2) ∪ 論理式3 (注) 注) ∩は論理積、∪は論理和を表しています。
指定方法
entry_no = 3 [0] 論理式1 true BSSEL_NEXT false BSSEL_JUMP 2 [1] 論理式2 true BSSEL_INCLUDE false BSSEL_NEXT [2] 論理式3 true BSSEL_INCLUDE false BSSEL_OMIT