ページのトップに戻る
PowerSORT V6.0  ユーザーズガイド

7.5.15 BSSUM構造体

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

typedef struct {
    unsigned __int64    sum_position;
    unsigned __int64    sum_length;
    unsigned char       sum_type;
    unsigned char       sum_resultsign;
    unsigned char       sum_resultnumber;
    unsigned char       reserve[5];         /* reserved */
} BSSUM;

BSSUM構造体メンバー

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

unsigned __int64    sum_position

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

unsigned __int64    sum_length

集約フィールドの長さをバイト数で指定します。
テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、指定したフィールド長に拡張して処理します。指定可能な各データ形式の長さについては、2.6.4.2 集約フィールドに指定可能なデータ形式を参照してください。

注意

テキストファイルCSV形式、およびテキストファイルTSV形式の場合、フィールドを囲むダブルクォーテーション( " )は、集約フィールドの長さに含みません。

例) テキストファイルCSV形式における、集約フィールドと長さ
集約フィールド        集約フィールドとして有効な文字        集約フィールドの長さ
123                   123                                   3バイト
"123"                 123                                   3バイト

unsigned char    sum_type

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

unsigned char    sum_resultsign

テキストファイルの場合に符号の有無を指定します。
必要に応じて以下を指定します。

定義値

意味

BS_SIGNED

集約フィールドの値に符号を付けます。
BS_PLUSUNSIGNEDとは排他関係にあります。

BS_PLUSUNSIGNED

集約フィールドの値が負の値の場合だけ「-」の符号を付けます。
BS_SIGNEDとは排他関係にあります。

参考

指定を省略した場合は、入力されたデータに従って以下のように処理します。

  • 集約結果が負の値の場合は、集約結果に「-」の符号を付けます。

  • 符号なしデータと符号付きデータの集約結果が正の値の場合は、集約結果に符号を付けません。

  • 符号なしデータ同士を集約した場合は、集約結果に符号を付けません。

  • 符号なしデータと符号付きデータの集約結果が「0」の場合は、符号を付けません。

  • 符号付きデータ同士を集約した場合は、集約結果に符号を付けます。集約した結果が「0」の場合は、「+」の符号を付けます。

unsigned char    sum_resultnumber

テキストファイルの場合に、集約フィールドの値がフィールド長に満たない場合の扱いを指定します。
必要に応じて以下を指定します。

定義値

意味

BS_ZEROPADDING

集約フィールドの値がフィールド長に満たない場合、左余白に「0」を詰めます。
例えば、集約フィールドの値が「1234」という4桁の数字であり、集約フィールド長が6バイトの場合、「001234」という数字にします。BS_BLANKPADDING、BS_ZBDELETEとは排他関係にあります。

BS_BLANKPADDING

集約フィールドの値がフィールド長に満たない場合、左余白に空白を詰めます。
例えば、集約フィールドの値が「1234」という4桁の数字であり、集約フィールド長が6バイトの場合、□□1234(□は空白を表わす)という数字にします。BS_ZEROPADDING、BS_ZBDELETEとは排他関係にあります。

BS_ZBDELETE

集約フィールドの先頭から空白、タブ、および「0」を削除します。
集約フィールドの先頭に空白、タブ、および「0」がある場合、左から評価し、「0」以外の数字が出現するまでの空白、タブ、および「0」を削除します。例えば、「00123」の場合、「123」という数字にします。ただし、集約フィールドが「0」(「0」、「0000」、「+000」など)の場合、最後の「0」は削除されません。テキストファイル浮動フィールド指定の場合に指定可能です。BS_ZEROPADDING、BS_BLANKPADDINGとは排他関係にあります。

参考

指定を省略した場合は、入力されたデータに従って以下のように処理します。

  • 出力結果の左余白に「0」を詰める条件

    • 左余白に'0'が詰められているデータ同士のとき

    • 左余白に'0'が詰められているデータと左余白に空白が詰められているデータのとき

    • 左余白に'0'が詰められているデータと左余白にタブが詰められているデータのとき

  • 出力結果の左余白に空白を詰める条件

    • 左余白に空白が詰められているデータ同士のとき

    • 左余白にタブが詰められているデータ同士のとき

    • 左余白に空白が詰められているデータと左余白にタブが詰められているデータのとき

注意

  • レコード集約機能の対象となったレコードの中から、どのレコードが出力されるかは不定です。

  • 集約フィールドは、キーフィールド、および他の集約フィールドと重なることはできません。

  • 集約フィールドは、レコード内に存在する必要があります。

  • レコード集約機能を使用する場合、キーフィールドは省略できません。

  • 集約フィールドの集約処理中にオーバフローが生じた場合の動作は、環境変数BSORT_SUMOVERCONTの指定に従います。

  • 小数点を含む数字の集約はできません。

  • テキストファイルの場合は、ASCIIコード、Unicode UCS-2形式、またはUnicode UTF-8形式で記述された半角の数字だけを処理の対象とします。

  • テキストファイル浮動フィールド指定の場合、集約フィールドにフィールド分離文字が現れたことにより集約フィールドの位置が変わる場合は、正しく動作しません。

  • テキストファイル浮動フィールド指定の場合、指定したフィールド長よりも長いフィールドが現れたときは、指定したフィールド長を超える部分はレコード集約機能の対象とせず、そのまま出力されます。また、指定したフィールド長より短いフィールドが現れたときは、指定したフィールド長に拡張します。

    例) 集約フィールドを「2番目のフィールドの長さ5バイト」、キーフィールドを「1番目のフィールドの長さ3バイト」とした場合
    入力レコード                  出力レコード
    001,12345ABC,OPQ (注1)        001,12456ABC,OPQ (注2)
    001,111,RST                   002,00127,UVW
    002,15,UVW (注1)
    002,00112DEF,XYZ
           注1) ここで示したレコードが、レコード集約機能で出力対象になるものとします。
           注2) 指定したフィールド長を超える部分(「ABC」)は、そのまま出力されます。
  • テキストファイルCSV形式、またはテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れたときは、指定したフィールド長を超える部分はレコード集約機能の対象とせず、出力もされません。また、指定したフィールド長より短いフィールドが現れたときは、指定したフィールド長に拡張します。

    例) テキストファイルCSV形式で、集約フィールドを「2番目のフィールドの長さ5バイト」、キーフィールドを「1番目のフィールドの長さ3バイト」とした場合
    入力レコード                  出力レコード
    001,12345ABC,OPQ (注1)        001,12468,OPQ (注2)
    001,123,RST                   002,00027,UVW
    002,15,UVW (注1)
    002,00012DEF,XYZ
           注1) ここで示したレコードが、レコード集約機能で出力対象になるものとします。
           注2) 指定したフィールド長を超える部分(「ABC」)は、出力されません。
  • テキストファイルCSV形式、またはテキストファイルTSV形式の場合、集約フィールドをダブルクォーテーション( " )で囲むかどうかは、出力対象となる入力レコードのフィールドに従います。出力対象となる入力レコードのフィールドがダブルクォーテーション( " )で囲まれているときは、レコード集約後のフィールドもダブルクォーテーション( " )で囲みます。

    例) テキストファイルCSV形式で、集約フィールドを「2番目のフィールドの長さ5バイト」、キーフィールドを「1番目のフィールドの長さ3バイト」とした場合
    入力レコード                  出力レコード
    001,"12345",OPQ (注)          001,"12468",OPQ
    001,"123",RST                 002,"00027",UVW
    002,"15",UVW (注)             003,11900,GHI
    002,00012,XYZ                 004,98769,MNO
    003,11111,GHI (注)
    003,"00789",JKL
    004,98765,MNO (注)
    004,4,PQR
           注) ここで示したレコードが、レコード集約機能で出力対象になるものとします。