uCosminexus Interschema ユーザーズガイド

[目次][用語][索引][前へ][次へ]

6.2.1 数値

数値型属性には,文字列型数値属性(整数,実数,及び暗黙的小数部付数値)と,バイト列型数値属性(整数,実数,及び暗黙的小数部付数値以外)があります。文字列型数値属性の符号は省略できます。

符号の出現位置として,数字列の前後どちらかを選択できます。符号と数字列の間にスペースがあってもかまいません(トランスレータが出力する場合,スペースは挿入されません)。入力データが負符号だけを使用する指定でも,+符号が入力できます。入力データに数字が一つも出現しない場合は,0と見なします。なお,埋め字は,0又はスペースを使用できますが,左寄せ指定や桁セパレータを使用する場合は,スペースだけ使用できます。

どの数値属性も,トランスレータでは,10進数として扱います。扱える10進数としての最大桁(整数部と小数部の桁数の合計)は,30桁です。

それぞれの属性について説明します。

<この項の構成>
(1) 整数
(2) 実数
(3) 暗黙的小数部付数値
(4) ゾーン形式(アンパック形式)数値
(5) パック形式数値
(6) 符号付2進整数
(7) 符号無2進整数

(1) 整数

「数字」「符号」「桁セパレータ」から構成される数値属性です。数値は最大30桁で小数部を持ちません。例を次に示します。

1234567890

-1,234,567,890

1234567890+

(2) 実数

「数字」「符号」「小数点」「桁セパレータ」「指数記号」から構成される,一般的な形式の数値属性です。数値は最大30桁(小数部,指数部桁数を含む),小数部は最大29桁,指数部は最大2桁です。入力データ中に数字がなく,小数点だけある場合や,指数部の指定だけがある場合はエラーになります。指数記号文字は,実数型が従う文字コードの中から指定してください。例えば,JIS7Aコードの場合,小文字の「e」は使用できません。

次に例を示します。

1234567890

1,234,567,890+

-123.456

1.23E3  (= 1230)

(3) 暗黙的小数部付数値

小数点が暗黙的に指定される数値で,「符号」「数字」から構成されます。数値は最大30桁(小数部を含む),小数部は最大29桁です。次に小数部が4桁の場合の例を示します。

1234567890  (= 123456.789)

+123  (= 0.0123)

1230000-  (= -123)

(4) ゾーン形式(アンパック形式)数値

最大16桁(16バイト)のゾーン形式数値です。小数点は暗黙的に示されます。符号は項目の最終バイトのゾーン部で表します。ゾーン形式数値の内容を次に示します。

表6-7 ゾーン形式数値の内容

文字コード 正符号 + 負符号 −
JIS8 0x3 0x7
EBCDIK 0xC又は0xF 0xD

最終バイト以外のゾーン部は各コードの正符号で表し,数値は各バイトの下位4ビットで表します(0x0〜0x9)。次にJISコードの例を示します。

0x31323334  (= 1234 小数部なしの場合) (= 12.34 小数部2桁の場合)

0x31323374  (= -1234 小数部なしの場合)

EBCDIKコードの場合,トランスレータは正符号として0xCを出力します。ただし,実行時オプション「-FDS」の指定がある場合,0xFを出力します。

この属性型に対しては,数値の桁数を指定するとサイズも指定されます。サイズ=桁数になります。

(5) パック形式数値

最大30桁(16バイト)のパック形式数値です。小数点は暗黙的に示されます。符号は項目データの最終バイトの下位4ビットで表します。正符号は0xC又は0xF,負符号は0xDで表し,数値は4ビットで表します(0x0〜0x9)。桁数が偶数の場合,最上位バイトの上4ビットは0でなければなりません。なお,トランスレータは正符号として0xCを出力します。

0x01234F  (= 1234 小数部なしの場合)(= 12.34 小数部2桁の場合)

0x01234D  (= -1234 小数部なしの場合)

この属性型に対しては,数値の桁数を指定するとサイズも指定されます。サイズ=↑(桁数+1)/2↑です。

(6) 符号付2進整数

1〜4バイトまでの符号付きの2進数です。エンディアンは,フォーマットの情報に従います。次にビッグエンディアンの場合の例を示します。

0x0100  (= 256)

0xFEFF  (= -257)

(7) 符号無2進整数

1〜4バイトまでの符号なしの2進数です。次に,2バイトでビッグエンディアンの場合の例を示します。

0x0100  (= 256)

0xFEFF  (= 65279)