ソートマージ


5.10.14 formatオペランド

意味

入力ファイル編成が固定長順またはテキストの場合の,出力レコードのフォーマットを定義します。

formatオペランドは出力フィールド(項目)単位に指定します。

項目の詳細をサブオペランドで指定します。

指定されたformatオペランドの順にデータを挿入し,出力レコードを作成します。

【例】

出力レコードが項目1から項目3まである場合,formatオペランドは3個指定します。

項目1,項目2,項目3

format=・・・・ 項目1の定義

format=・・・・ 項目2の定義

format=・・・・ 項目3の定義

形式
 format={  val{ (field-name)|()|(insertdata) }
         |calc(calculation formula) }
       [△pos(position) ]
       [△len(length) ]
       [△rounding-method ]
       [△padding(C'padding-character'|X'hex-digit') ]
  • valまたはcalcのどちらかを必ず指定します。

  • pos,len,rounding-method,およびpaddingは省略できます。

  • calcを指定した場合,lenは必ず指定します。

    val()およびval(insertdata)を指定した場合,lenは指定できません。

    val(field-name)でlenを省略した場合,フィールドで定義した長さとします。

  • 1つのformatオペランドは複数行にわたって記述できます。また,1行に複数のサブオペランドを指定できます。ただし,1つのサブオペランドは複数行にわたって記述できません。

  • formatオペランドをダブルクォーテーション(")で囲まないでください。

  • 指定できるformatオペランドの個数は,環境ファイル「EXS_FORMATNUMMAX」で指定できます。環境ファイル「EXS_FORMATNUMMAX」については,「15.1.1(29) EXS_FORMATNUMMAX【SORT EE(64) 09-00以降】」を参照してください。

  • formatオペランドは,exsortパラメタファイルで指定します。exsort64コマンドラインで指定した場合,KBLS1114-Eエラーとなります。

  • formatオペランドは,UNIXのexsort64(64ビット版SORT EE)コマンドだけ指定できます。Windowsのexsort64コマンド,またはexsort(32ビット版SORT EE)コマンドに指定した場合,KBLS1100-Eエラーとなります。

  • reorgオペランドと同時に指定できません。同時に指定した場合はKBLS2388-Eエラーとなります。

〈この項の構成〉

(1) valサブオペランド

意味

出力レコードへ挿入するフィールドや挿入データを指定します。

形式
val{ (field-name)|()|(insertdata) }
指定値

valに指定する内容を次の表に示します。

表5‒34 valに指定する内容

項番

項目

指定値

1

(field-name)

fieldオペランドで指定されたフィールド名のフィールドのデータを挿入します。

2

()

1レコードを挿入します。

3

(insertdata)

指定されたデータを挿入します。

指定できるフィールド名の属性を次の表に示します。

表5‒35 指定できるフィールド名の属性

指定できる属性※1

属性コード

文字

文字(JIS8単位コード)

j

文字

c

文字(文字順序変更機能で指定した文字)

q

文字(ワイド文字)※2

w

文字(マルチバイト文字)※2

u

文字(マルチバイト文字で,UnicodeのIVSに対応した属性)※2

v

文字(左分離符号付き数字)

d

2進数

符号付き固定小数点2進数

n

符号なし2進数(0から始まる整数)

m

内部浮動小数点

f

10進数

内部10進数

p

外部10進数

z

左符号付き外部10進数

x

右分離符号付き外部10進数

s

左分離符号付き外部10進数

t

日付

日付(英数字)

g

注※1

データの形式については,「3.2 キー属性と形式」を参照してください。

注※2

テキストファイルだけ指定できます

挿入データの指定内容を次の表に示します。

表5‒36 挿入データ指定内容

指定値

指定内容

C'文字列'

任意の文字列(改行文字は指定できません)

X'16進数'

「0〜9」,「A〜F」,「a〜f」の偶数桁の16進数

注意事項
  • 挿入文字データ(C'nn')の中にシングルクォーテーション(')または円記号(\)のどちらかを指定する場合は,選択条件式の文字条件値と同じように指定してください。選択条件式の書き方については,「4.5.3 選択条件式の書き方」を参照してください。

  • テキストファイルの場合,X'16進数'の中に改行コードを含むことはできません。

  • 文字挿入データ「C'文字'」に日本語(マルチバイト文字)を含む場合,パラメタファイルに記述されたcode文で指定された文字コードから,入力ファイルパラメタのcodetypeに指定されたエンコードに変換し挿入します。エンコードに変換できなかった場合,KBLS2409-Eエラーとなります。

  • 入力フィールドに実レコードを超える範囲を指定した場合でもエラーとはなりません。また,lenの指定によって,挿入する長さも異なります。挿入するデータについて,次の表と図に示します。

    表5‒37 フォーマットの挿入データ

    項番

    len指定

    比較

    フォーマットの挿入データ

    1

    なし

    実 > P

    フィールドに指定された長さ分,データを挿入

    2

    実 < P+L

    実レコード長の範囲にあるデータだけ挿入

    3

    実 < P

    フィールドに指定された長さ分,パディング

    4

    あり

    実 > P

    lenで指定された長さ分,データを挿入

    5

    実 < P+L

    実レコード長の範囲にあるデータを挿入し,lenに足りない分はパディング

    6

    実 < P

    lenで指定された長さ分,パディング

    (凡例)

    実:実レコード長

    P:入力フィールドの開始位置

    L:入力フィールド長

    図5‒10 フォーマットの挿入データ

    [図データ]

(2) calcサブオペランド

意味

計算式,および挿入する数値データを指定します。

形式
calc = { calculation formula | field-name | 数値 }
指定値

calcに指定する内容を次の表に示します。

表5‒38 calcで指定できる内容

項目

指定値

calculation formula

指定された計算式の演算結果を挿入します。

field-name

fieldオペランドで指定されたフィールド名のフィールドのデータを挿入します(10進数項目)

数値

指定された数値データを挿入します。

符号付き数値は,括弧で囲みます。

計算式に指定できる組み合わせを次の表に示します。

表5‒39 計算式に指定できる組み合わせ

指定種類

指定例

10進数項目と10進数項目

10進数項目A + 10進数項目B

10進数項目と数値

10進数項目A * 100

数値と数値

100 * 0.25

100 * (-0.25)

注※

fieldオペランドで指定された10進数項目のフィールド名を示す。

計算式に指定できる10進数項目を次の表に示します。

表5‒40 計算式に指定できる10進数項目

ファイル編成

10進数項目

属性コード

固定長順編成ファイル(S)

テキストファイル(A)

内部10進数

p

外部10進数

z

左符号付き外部10進数

x

右分離符号付き外部10進数

s

左分離符号付き外部10進数

t

注※

データの形式については,「3.2 キー属性と形式」を参照してください。

計算式に指定できる内容を次の表に示します。

表5‒41 計算式に指定できる内容

項番

指定内容

意味

指定最大

1

+(加算),-(減算),*(乗算),/(除算)

演算子

該当しない

2

「0〜9」の数値

数値データ

16個

3

( ),({+|- } 「0〜9」の数値)

優先順位,符号付き数値

24ネスト

4

フィールド名

fieldオペランドで指定された,10進数項目のフィールド名

16個

注※

レコード中の値を演算に使用する場合に指定します。

注意事項
  • 計算式にフィールド名を2つ以上使用する場合,フィールドの属性は同じであること。

  • 符号付き数字は()で囲みます。また,符号は数字の前に指定します。

    例)(+3),(-3)

  • 演算結果を挿入するフィールド属性の形式を,次の表に示します。

    表5‒42 挿入するフィールド属性の形式

    フィールド名指定

    演算結果を挿入するフィールド属性

    あり

    入力レコードのフィールド属性の形式を継承

    なし

    外部10進数(z)

  • 0除算の場合はKBLS2424-Eエラーとなります。

  • 数値項目のデータに形式以外のデータ(数値以外)があった場合,KBLS2413-Eエラーとなります。

  • lenサブオペランドは必ず指定してください。

(3) posサブオペランド

意味

valまたはcalcの挿入データは,formatオペランドの順に出力レコードを作成しますが,このオペランドを指定すると挿入データを固定位置に挿入できます。

形式
pos(position)
指定値

挿入データの位置を数字で指定します。指定できる桁数は,レコード長の上限値をバイト単位に変換した値の桁数以内です。

-locatajstパラメタを指定したかどうかによって,レコード先頭の解釈が異なります。

positionに指定できる範囲を次の表に示します。

表5‒43 positionの指定範囲

ファイル形式

最大レコード長は65,535バイト以下※2

最大レコード長は65,536バイト以上※3

-locatajstパラメタ

-locatajstパラメタ

指定あり

指定なし

指定あり

指定なし

固定長順

1〜65,535

0〜65,534

1〜レコード長の上限値※4

0〜レコード長の上限値−1※4

テキスト※1

改行文字「LF」

1〜65,535

0〜65,534

改行文字「CRLF」

1〜65,534

0〜65,533

注1※

入力レコードの改行文字については,「5.8.7 recsepaオペランド」を,出力レコードの改行文字については,「5.10.5 recsepaオペランド」を参照してください。

注※2

UNIXの64ビット版(環境変数「EXSORT64MAXRECLEN」の指定がない,または無効の場合),UNIXの32ビット版,およびWindows版の場合を示します。

注※3

UNIXの64ビット版で環境変数「EXSORT64MAXRECLEN」の指定がある場合を示します。

注※4

レコード長の上限値は,環境変数「EXSORT64MAXRECLEN」に指定された「レコード長の上限値」です。環境変数「EXSORT64MAXRECLEN」ついては「14.1 SORT EEの環境変数の設定」を参照してください。

注意事項
  • 挿入データとの間に生じた間隔には,空白が挿入されます。

【例】

formatオペランドの指定

 format=val(C'aaaaa') pos(0)
 format=val(C'bbbbb') pos(10)

出力結果

 先頭へ定数C'aaaaa'を,10バイト目へ定数C'bbbbb'を挿入します。

 5バイト目から空白(△)が5バイト挿入されます。

[図データ]

  • 前の出力フィールドや挿入データと重なる位置は指定できません。

【例】

formatオペランドの指定

 format=val(C'aaaaa') pos(0)
 format=val(C'bbbbb') pos(3)

出力結果

 先頭へ定数C'aaaaa'(5バイト)をを挿入しているため,3バイト目に定数C'bbbbb'を挿入することはできません。

[図データ]

(4) lenサブオペランド

意味

出力フィールドの長さを指定します。

形式
len(length)
指定値

出力フィールドの長さを5桁以内の数字で指定します。

指定する長さは,属性によってlenサブオペランドの形式と,lengthに指定できる範囲が異なります。

lenサブオペランドの形式と,lengthに指定できる長さを次の表に示します。

表5‒44 lenサブオペランドの形式とlengthに指定できる長さ(単位)

挿入するデータの属性

形式

指定できる長さ

文字

j,c,q,w※1

len(バイト長)

1〜4,096(バイト)

u,v

len(文字数)

1〜4,096(文字数)※2

d

len(桁数)

1〜256(桁)※3

2進数

m,n

len(バイト長)

2,4,または8(バイト)

10進数

p

len(バイト長)

1〜10(バイト)

z,x

len(総桁数[,小数桁])

総桁数:1〜18(桁)※3

小数桁:0〜総桁数(桁)※3

s,t

len(総桁数[,小数桁])

総桁数:2〜19(桁)※3※4

小数桁:0〜総桁数(桁)※3※4

日付

g

len(桁数)

2〜8(桁)※5

注※1

入力データのエンコードの種別によって,マルチバイト文字の長さは異なります。詳細は「付録I.2 文字列データの扱い」を参照してください。

注※2

「バイト長」ではなく「文字数」を指定してください。UnicodeのVS(Variation Selector,異体字セレクタ)は文字数に数えません。マルチバイト文字の扱いについては,「付録I.2(6) IVS対応」を参照してください。

注※3

「バイト長」ではなく数値の「桁数」を指定してください。数値データの扱いについては,「付録I.3 数値データの扱い」を参照してください。

注※4

右分離符号付き外部10進数(s),および左符号付き外部10進数(t)の場合,長さに符号部の1桁を含めます。

注※5

「バイト長」ではなく日付の「桁数」を指定してください。日付データの扱いについては,「付録I.4 日付データの扱い」を参照してください。

(a) valサブオペランド指定との組み合わせ

valの指定が,文字または日付属性のフィールド名指定の場合

fieldで指定された開始位置から,lenで指定された長さ分のデータを挿入します。

lenが省略された場合,fieldで指定された長さ分のデータを挿入します。

lenにバイト長以外(小数部桁数など)を指定した場合エラーとなります。

入力データ長とlenで指定された長さの大小関係を次の表に示します。

表5‒45 入力データ長と指定された有効桁数の大小関係

len指定

挿入するデータ

フィールドで指定された開始位置から,フィールドで指定された長さのデータを挿入します。

  1. 入力レコードのフィールド長 ≧ len指定値(バイト長)

    フィールドで指定された開始位置から,lenで指定された長さのデータを挿入します。次の図の【例1】を参照してください。

  2. 入力レコードのフィールド長 < len指定値(バイト長)

    フィールドで指定された開始位置から,フィールドで指定された長さのデータを挿入し,lenで指定された長さに足りない部分をパディングします。次の図の【例2】を参照してください。

    パディング文字はpaddingサブオペランドで指定できます。

    ただし,フィールド名の属性が「日付(g)」および「左分離符号付き数字(d)」の場合,paddingサブオペランドは無効です。空白でパディングします。

    paddingサブオペランドは,「5.10.14(6) paddingサブオペランド」を参照してください。

【例1】

フィールド長10バイトの入力レコードから,5バイトのデータを挿入する。

[指定例]

  -joininp alias=IN
           field=Cdata:c+0-10
    :
  -joinout format=val(IN.Cdata) len(5)

[出力結果]

 入力レコードの先頭から5バイトが挿入されます。

[図データ]

【例2】

フィールド長3バイトの入力レコードから,7バイトのデータを挿入する。

[指定例]

  -joininp alias=IN
           field=Cdata:c+5-3
    :
  -joinout format=val(IN.Cdata) len(7) padding(C'△')

[出力結果]

 入力レコードの5バイト目から3バイトが挿入されます。

 足りない部分は空白(△)でパディングされます。

[図データ]

フィールド名の属性が「日付(g)」でlenが指定された場合,lenで指定された有効桁に正規化して挿入します。正規化では入力データの形式チェックを行います。入力データの先頭2文字(西暦下2桁)に数字「0〜9」以外が含まれた場合,または入力データが1桁しかなかった場合,KBLS2416-Eエラーとなります。なお,年号以外のデータ(月,日)は,形式チェックしません。

入力データが無い場合,先頭2文字(西暦下2桁)に基準年,残りの桁に空白を仮定し,指定された桁で出力します。

データの形式については,「3.2 キー属性と形式」を参照してください。

valの指定が,C'文字列',X'16進数',別名指定,属性が内部浮動小数点数(f)のフィールド名の場合

lenは指定できません。

valの指定が,10進数属性のフィールド名指定の場合

入力した10進数データを,lenで指定された有効桁に正規化して挿入します。正規化では入力データの形式チェックを行います。入力データに数字「0〜9」および符号以外が含まれた場合,KBLS2416-Eエラーとなります。データの形式についは,「3.2 キー属性と形式」を参照してください。

lenの指定がないときは,入力した10進数データの桁数でデータを挿入します。正規化処理は行いません。

入力データの桁数指定は,fieldオペランドで指定します。

(1)小数部の扱い
  • ファイル編成が固定長順編成ファイルおよびテキストファイルで扱う10進数形式では,小数点をデータ中に持てないため,利用者側で小数部の桁数を決めます。小数部桁数を省略した場合,0を仮定します。

    【例】

    入力データ「123456789」の9バイトの正の外部10進数の場合,有効桁数と小数部桁数の指定による10進数の意味を次の表に示します。

    表5‒46 10進数の意味

    項番

    総桁数

    小数部桁数

    10進数の意味

    1

    9

    0

    整数部9桁の「123456789」

    2

    9

    9

    小数部9桁の「.123456789」

    3

    9

    3

    整数部6桁小数部3桁の「123456.789」

    4

    9

    8

    整数部1桁小数部8桁の「1.23456789」

  • 総桁数が小数部桁数より小さい場合はエラーとなります。

(2)小数部の扱い

小数部桁の指定有無による小数部データ調整を次の表に示します。

表5‒47 小数部桁数の指定有無による小数部データ調整

入力データの小数部桁数指定

lenの小数部桁数指定

小数部データ調整

なし

なし

なし

なし

あり

0を挿入します。次の図の【例1】を参照してください。

あり

なし

なし

あり

あり

入力データの小数部桁数(A)とlenの小数部桁数(B)の大小関係から挿入データを決定します。

  • A ≧ B

    入力データの小数部上位桁からBの長さのデータを挿入します。次の図の【例2】を参照してください。

  • A < B

    入力データの小数部をAの長さで上位桁に挿入し,「 B−A 」の長さで0を挿入します。次の図の【例3】を参照してください。

【例1】

[図データ]

【例2】

[図データ]

【例3】

[図データ]

(3)整数部データ調整
  • (総桁数 − 小数部桁数)が整数部桁数となります。

    【例】

    入力データの整数部桁数(A)とlen指定の整数部桁数(B)の大小関係による整数部データ調整を次の表に示します。

    表5‒48 整数部データ調整

    大小関係

    整数部データ調整

    A ≧ B

    入力データの整数部右からB分挿入します。

    次の図の【例1】,【例2】を参照してください。

    A < B

    入力データの整数部からA分挿入し,先頭桁に0を挿入します。

    次の図の【例3】,【例4】を参照してください。

    【例1】外部10進数

    [図データ]

    【例2】左分離符号付き外部10進数

    [図データ]

    【例3】外部10進数

    [図データ]

    【例4】左分離符号付き外部10進数

    [図データ]

  • 左側が空白のデータを入力した場合,空白を0とみなして有効桁に調整します。

(b) calcサブオペランド指定との組み合わせ

  • lenは必ず指定してください。

  • 演算結果を挿入する項目の総桁数と小数部桁数を指定します。

  • 演算結果の整数桁が,有効桁の最大値を超えた場合はKBLS2412-E(オーバーフロー)エラーに,lenで指定された整数桁(総桁数−小数桁)を超えた場合KBLS2423-Eエラーとなります。

  • 演算結果の小数桁が,lenで指定された小数桁を超えた場合,右側の桁あふれ部分を丸めて,指定された有効桁数に調整されます。丸め処理はformatオペランドに指定された方式で行います。丸め方式については,「5.10.14(5) 桁の丸め方式サブオペランド」を参照してください。

(5) 桁の丸め方式サブオペランド

意味

valでの数値項目の挿入や,calcでの演算結果で,lenで指定した小数桁数以上の小数データが発生した場合,lenで指定した小数桁に丸める方式を指定します。

指定値

指定内容を次の表に示します。

表5‒49 桁の丸め方式

項番

指定値

丸め内容

1

round

有効小数部以下を四捨五入

2

roundup

有効小数部以下を切り上げ

3

truncate

有効小数部以下を切り捨て

丸め対象の桁位置を次の表に示します。

表5‒50 丸め対象の桁位置

項番

小数部

桁数指定

小数データ発生有無

小数部丸め

1

無または0

丸めなし

2

小数1桁目以降が丸め対象

3

丸めなし

4

指定小数部桁数(A)とデータ中の小数部桁数(B)の大小関係

  • A = B ・・・ 丸めなし

  • A > B ・・・ 丸めなし

  • A < B ・・・ データ中小数部のA+1桁目以降が丸め対象

注意事項
  • 桁の丸め方式の優先順位を次に示します。

    1. formatオペランドの桁の丸め方式サブオペランド

    2. 環境ファイルの「EXS_ROUND」項目

    3. 切り捨て(デフォルト値)

(6) paddingサブオペランド

意味

挿入するデータの長さを,指定されたlenにそろえるためのパディング文字を指定します。

このサブオペランドは,valに文字属性フィールドを指定した場合に有効です。

形式
padding({ C'padding-character' | X'hex-digit' })
指定値

指定内容を次の表に示します。

表5‒51 パディング文字

項番

指定値

挿入内容

1

C'padding-character'

パディング文字として,任意の1文字(半角英数字)を指定します。

【指定例】padding(C'*')

2

X'hex-digit'

パディング文字として,任意の1バイトのデータを指定します。

【指定例】padding(X'ff')

注意事項
  • パディング文字に,改行文字およびマルチバイト文字(日本語)は指定できません。

  • 16進数として指定できるのは「0〜9」,「A〜F」および「a〜f」だけです。

  • exsortパラメタファイルに指定する場合は,ダブルクォーテーションで囲まないでください。また,パディング文字に引用符(シングルクォーテーションまたはダブルクォーテーション)を指定する場合,「\」でのエスケープは不要です。

    【例】

     padding(C'*')

     padding(X'ff')

     padding(C'"')

  • パディング文字の優先順位を次に示します。

    1. formatオペランドのpaddingサブオペランド

    2. 出力ファイルパラメタ(-outfile,-joinout)のpaddingオペランド

    3. 環境ファイル「EXS_PADDING」項目

    4. デフォルト値

     【テキスト】空白(0x20)

     【固定長順】ゼロ(0x00)

  • 指定されたフィールド名の属性が「日付(g)」および「左分離符号付き数字(d)」の場合,paddingは無効です。空白を加えて長さをそろえます。