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