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

6.5.15 BSSUM構造体

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

typedef struct {
    unsigned long    sum_position;
    unsigned long    sum_length;
    unsigned char    sum_type;
    unsigned char    sum_resultsign;
    unsigned char    sum_resultnumber;
    unsigned char    reserve;            /* reserved */
} BSSUM;

BSSUM構造体メンバー

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

sum_position

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

sum_length

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

注意

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

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

sum_type

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

sum_resultsign

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

定義値

意味

BS_SIGNED

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

BS_PLUSUNSIGNED

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

参考

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

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

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

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

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

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

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」は削除されません。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合に指定可能です。BS_ZEROPADDING、BS_BLANKPADDINGとは排他関係にあります。

参考

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

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

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

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

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

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

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

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

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

注意

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

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

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

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

  • 集約フィールドの集約処理中にオーバフローが生じた場合の動作は、スタートアップファイルのBSORT_SUMOVERCONTの指定に従います。

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

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

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

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

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

    例) テキストファイルCSV形式で、集約フィールドを「2番目のフィールドの長さ5バイト」、キーフィールドを「1番目のフィールドの長さ3バイト」とした場合
    入力レコード                  出力レコード
    001,12345ABC,OPQ (注1)        001,12468,OPQ (注2)
    001,123,RST                   002,00027,UVW (注3)
    002,15,UVW (注1)
    002,00012DEF,XYZ
           注1) ここで示したレコードが、レコード集約機能の出力対象になったものとします。
           注2) 指定したフィールド長を超える部分(「ABC」)は、出力されません。
           注3) 指定したフィールド長より短い場合は、指定したフィールド長に拡張されます。
  • テキストファイル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
           注) ここで示したレコードが、レコード集約機能の出力対象になったものとします。
  • テキストファイル浮動フィールド指定におけるレコード集約機能では、実際の集約フィールドの長さが集約フィールドとして指定された長さより短い場合、集約フィールドを指定された長さに拡張して出力します。集約フィールドの拡張により、レコード長が指定された最大レコード長を超えると、オーバフローが発生したものとして処理します。このため、テキストファイル浮動フィールド指定におけるレコード集約機能では、集約フィールドが集約フィールドとして指定された長さに拡張されることを考慮して、最大レコード長を指定してください。