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 | 集約フィールドの値が負の値の場合だけ「-」の符号を付けます。 |
参考
指定を省略した場合は、入力されたデータに従って以下のように処理します。
集約結果が負の値の場合は、集約結果に「-」の符号を付けます。
符号なしデータと符号付きデータの集約結果が正の値の場合は、集約結果に符号を付けません。
符号なしデータ同士を集約した場合は、集約結果に符号を付けません。
符号なしデータと符号付きデータの集約結果が「0」の場合は、符号を付けません。
符号付きデータ同士を集約した場合は、集約結果に符号を付けます。集約した結果が「0」の場合は、「+」の符号を付けます。
unsigned char sum_resultnumber
テキストファイルの場合に、集約フィールドの値がフィールド長に満たない場合の扱いを指定します。
必要に応じて以下を指定します。
定義値 | 意味 |
---|---|
BS_ZEROPADDING | 集約フィールドの値がフィールド長に満たない場合、左余白に「0」を詰めます。 |
BS_BLANKPADDING | 集約フィールドの値がフィールド長に満たない場合、左余白に空白を詰めます。 |
BS_ZBDELETE | 集約フィールドの先頭から空白、タブ、および「0」を削除します。 |
参考
指定を省略した場合は、入力されたデータに従って以下のように処理します。
出力結果の左余白に「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 注) ここで示したレコードが、レコード集約機能で出力対象になるものとします。