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

6.5.17 BSSELE構造体

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

typedef struct {
    unsigned char        sele_cmpoprat;
    unsigned char        sele_type1;
    unsigned char        sele_type2;
    unsigned char        sele_option;
    unsigned long        sele_position1;
    unsigned long        sele_length1;
    union {
        unsigned long    sele_position2;
        BSPTR_UCHAR      sele_literal;
    } pos2;
    unsigned long        sele_length2;
    unsigned char        sele_trueop;
    unsigned char        sele_falseop;
    unsigned char        sele_mask;
    unsigned char        sele_option2;
    unsigned long        sele_truejmp;
    unsigned long        sele_falsejmp;
    BSPTR_VOID           subfield_addr;
} BSSELE;

BSSELE構造体メンバー

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

sele_cmpoprat

比較演算子を指定します。
以下に比較演算子とその意味を示します。

比較演算子

意味(真の条件)

BSCOND_EQ

被比較フィールド = 比較フィールド、または自己規定値

BSCOND_NE

被比較フィールド ≠ 比較フィールド、または自己規定値

BSCOND_GT

被比較フィールド > 比較フィールド、または自己規定値

BSCOND_GE

被比較フィールド ≧ 比較フィールド、または自己規定値

BSCOND_LT

被比較フィールド < 比較フィールド、または自己規定値

BSCOND_LE

被比較フィールド ≦ 比較フィールド、または自己規定値

注意

被比較フィールドが、EUCファイルコード、EUC2バイトプロセスコード、およびEUC4バイトプロセスコードの場合は、環境変数LC_COLLATEに従った照合順序で比較します。

sele_type1

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

sele_type2

比較フィールドのデータ形式を指定します。
指定可能なデータ形式については、被比較フィールドと比較フィールドに指定可能なデータ形式を参照してください。なお、比較フィールドに自己規定値を指定するときは、sele_type2にBS_LITERALを指定します。

注意

  • 被比較フィールドと比較フィールドのデータ形式が異なるときは、被比較フィールドのデータ形式に合わせてから比較します。

  • 被比較フィールドのデータ形式の種類が文字の場合、被比較フィールドと比較フィールドの短い方の長さで比較します。

  • 比較フィールドのデータ形式の種類が数値、または数字の場合、被比較フィールドと比較フィールドの短い方を長い方の長さに合わせて比較します。

sele_option

被比較フィールドの操作を指定します。
テキストファイルの場合に有効です。必要に応じて以下を指定します。複数の操作を指定する場合は、その論理和を指定します。

操作

意味

BSOPT_BLANK

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

BSOPT_DICTIONARY

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

BSOPT_IGNORE

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

BSOPT_JUMBO

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

BSOPT_NUMERIC

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

注意

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

sele_position1

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

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バイト

pos2.sele_position2

比較フィールドの位置を指定します。
バイナリファイルとテキストファイル固定フィールド指定の場合は、レコードの先頭を0としたバイト位置を指定します。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合は、0から数えたフィールド番号を指定します。
pos2.sele_literalとは共用体で定義されています。自己規定値を指定する場合は、pos2.sele_literalに指定します。

pos2.sele_literal

自己規定値のアドレスを指定します。
テキストファイル浮動フィールド指定の場合は、自己規定値にフィールド分離文字列を含むことはできません。
pos2.sele_position2とは共用体で定義されています。自己規定値以外を指定する場合は、pos2.sele_position2に指定します。

注意

  • テキストファイル固定フィールド指定の場合は、自己規定値にレコード分離文字を含むことはできません。

  • テキストファイル浮動フィールド指定の場合は、自己規定値にフィールド分離文字列、またはレコード分離文字を含むことはできません。

  • テキストファイルCSV形式、およびテキストファイルTSV形式の場合、自己規定値にフィールドを囲むダブルクォーテーション(")を指定する必要はありません。

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バイト

sele_trueop

比較結果が真のときの処理を指定します。
最後のエントリーのsele_trueopとsele_falseopには、比較処理の終りを示す定義値を指定します。比較結果の処理については、以下を参照してください。

表6.3 比較結果の処理方法

処理の種類

定義値

意味

INCLUDE

BSSEL_INCLUDE

比較処理の終りとレコードを処理対象とすることを示します。

OMIT

BSSEL_OMIT

比較処理の終りとレコードを処理対象外とすることを示します。

次の選択フィールドの処理

BSSEL_NEXT

次の比較処理に移ることを示します。

指定選択フィールドへ飛ぶ

BSSEL_JUMP

指定した比較処理に移ることを示します。

sele_falseop

比較結果が偽のときの処理を指定します。
最後のエントリーのsele_trueopとsele_falseopには、比較処理の終りを示す定義値を指定します。比較結果の処理については、表6.3 比較結果の処理方法を参照してください。

sele_mask

サポートしていないメンバーです。
何も指定する必要はありません。

sele_option2

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

定義値

意味

BSOPT2_LOCALE

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

注意

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

sele_truejmp

sele_trueopにBSSEL_JUMPを指定したときの飛び先を指定します。
sele_truejmpにiを指定した場合、比較結果が真のときにsele_entry[i]の選択フィールドへ処理が移ります。sele_truejmpには、自身のエントリー番号+1からentry_no-1の範囲の値を指定します。

sele_falsejmp

sele_falseopにBSSEL_JUMPを指定したときの飛び先を指定します。
sele_falsejmpにiを指定した場合、比較結果が偽のときにsele_entry[i]の選択フィールドへ処理が移ります。sele_falsejmpには、自身のエントリー番号+1からentry_no-1の範囲の値を指定します。

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