PowerSORT Workstation V5.0 使用手引書
目次 索引 前ページ次ページ

第6章 C言語プログラムからPowerSORTを使用する> 6.4 BSORT関数で使用する構造体

6.4.19 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構造体メンバ

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_B

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

BSOPT_D

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

BSOPT_I

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

BSOPT_J

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

BSOPT_N

符号を含む数字の文字列を算術的な値で比較します。文字列中に数字以外の文字が存在した場合の結果は保証されません。sele_option2のBSOPT2_Wとは排他関係にあります。

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

unsigned long  sele_position1

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

unsigned long  sele_length1

被比較フィールドの長さを設定します。
テキストファイル浮動フィールド指定の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、実際のフィールド長で処理します。

unsigned long  pos2.sele_position2

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

BSPTR_UCHAR  pos2.sele_literal

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

unsigned long  sele_length2

比較フィールドまたは自己規定値の長さを設定します。
テキストファイル浮動フィールド指定の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、実際のフィールド長で処理します。

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には、比較処理の終りを示す定義値を設定します。
比較結果の処理については、比較結果の処理方法を参照してください。

BSPTR_UCHAR  sele_mask

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

unsigned char  sele_option2

複数バイトで表現される文字の文字列を文字単位に比較する場合の操作を指定します。
必要に応じて、以下を指定します。

定義値

意味

BSOPT2_W

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

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

unsigned long  sele_truejmp

sele_trueopにBSSEL_JUMPを設定したときの飛び先を設定します。
iを設定すると真のとき、sele_entry[i]の選択フィールドの処理に移ります。sele_truejmpとsele_falsejmpには、自身のエントリ番号+1〜entry_no-1の範囲の値を設定します。

unsigned long  sele_falsejmp

sele_falseopにBSSEL_JUMPを設定したときの飛び先を設定します。
iを設定すると偽のとき、sele_entry[i]の選択フィールドの処理に移ります。sele_truejmpと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


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2004-2006