uCosminexus Interschema ユーザーズガイド

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

6.5.2 入力データに対する規則

入力データに対する規則について説明します。

トランスレータはMDLファイルで宣言された通りに入力データを解析し,指定された属性型の値と認識します。

入力データ中である要素として認識されるのは,MDLファイル内のサイズ指定でされた範囲内に記述されている内容です。例えば,入力データが「0123456789...」であるとき,先頭の要素が3バイト整数であれば,この要素は「012」=12となります。数値型属性の場合は,MDLファイル内でその数値が取ることができる最大桁数が指定されています。省略時の最大桁数は,30桁です。入力データを解析した結果,数値が最大桁数を超える場合はエラーになります。

<この項の構成>
(1) 文字列型属性の埋め字
(2) 文字列型数値属性の埋め字
(3) 日付時刻属性の埋め字
(4) 文字列型数値属性の入力形式
(5) 開始/終了シフトコードを使用する文字列型
(6) 日付時刻型の規則
(7) その他の属性の規則

(1) 文字列型属性の埋め字

文字列型に対して,不要文字削除指定がある場合は,埋め字部分はこの要素の値として認識しません。要素が占めるエリア内で,右寄せ/左寄せ指定がされたものとは反対側から,埋め字以外の文字が出現するまでを埋め字として認識します。次に例を示します。

 
入力データ          △△漢字△漢字△△
左寄せ指定時の値    △△漢字△漢字
右寄せ指定時の値    漢字△漢字△△
 

(凡例)
△:埋め字のスペースです。

開始/終了シフトコードを使用する文字列型(JISKS,KEISS)の場合,指定された埋め字は開始から終了シフトコード内で使用されます。例外的にシフトコード外で使用できる埋め字については「(5) 開始/終了シフトコードを使用する文字列型」を参照してください。上記の例では,入力データが次のようになります。

 
(S)△△漢字△漢字△△(E)
 

(凡例)
(S):開始シフトコードです。
(E):終了シフトコードです。

なお,2バイト文字列の場合は,埋め字も2バイトコードにしてください。

(2) 文字列型数値属性の埋め字

文字列型数値属性の場合,埋め字部分は,0又はスペースだけ使用できます。埋め字部分は,数値の有効桁として認識されません。ただし,左寄せの場合の埋め字はスペースだけです。数値型属性の場合は,右寄せにすることをお勧めします。

例として「123.456」という値を暗黙的小数部付数値型(8バイト,小数部3桁)で表すと次のようになります。

 
左寄せ・埋め字△  123456△△
右寄せ・埋め字0  00123456
 

数字列が省略され埋め字だけとなった場合,トランスレータは値を0と認識します。

(3) 日付時刻属性の埋め字

文字列型と同じです。パート部分で使用する文字を埋め字とすると,不正な結果となることがあるので,注意してください。

(4) 文字列型数値属性の入力形式

埋め字の指定にかかわらず,符号の外側(要素エリアの空き部分),符号と数字列の間にスペース文字があってもかまいません(トランスレータはスペース文字を無視するか,0として認識します)。数字列の途中でスペースなどの数字以外の文字が出現した場合はエラーになります。ただし,整数型,実数型で桁セパレータを使う指定がある場合,桁セパレータ文字は除きます。桁セパレータは整数部だけで,3桁ごとに出現しなければなりません。また,数字列の先頭が桁セパレータであってはなりません。

(5) 開始/終了シフトコードを使用する文字列型

文字列で開始・終了シフトコードを使用する文字コード型データの場合,シフトコードのほかに,1バイトのスペース文字があってもかまいません。該当する文字コードは,JISKSとKEISSです。左寄せの例を次に示します。

 
(S)漢字△△漢字△△(E)▼▼
 

(凡例)
(S):開始シフトコードです。
(E):終了シフトコードです。
△:埋め字として指定された文字(2バイト文字)です。
▼:1バイトのスペース文字です。
  • KEISシフト付(KEISS)の場合:EBCDIKスペース文字(0x40)
  • JISシフト付(JISKS)の場合:JISスペース文字(0x20)

(6) 日付時刻型の規則

最終パートの後続文字列の次(後続文字列がない場合は最終パートの数値文字の次)以降を,ゾーン部文字列と見なします。数値の桁数,パート間の区切り文字,ゾーン部について,型定義とのマッチングします。秒ssパートの小数部については,指定桁数以内で連続する数字列を小数部と見なします。各パート値について,通常は範囲を検証しません。実行時オプション「-DTM」の指定がある場合,「6.2.4(3) 日付時刻型」の「表6-8 日付時刻型のパート」に示す範囲内であるかを検証します。省略されたパートは,値0を仮定します。

(7) その他の属性の規則

ゾーン形式数値,パック形式数値の場合,符号として使用する値(4ビット数値)が決まっています。使用できない数値が入力データ中に現れた場合はエラーになります。符号の値については「6.2.1 数値」を参照してください。

2進整数の場合,トランスレータはフォーマットで宣言されているエンディアンに基づいて値を解釈します。初期値は,ビッグエンディアンです。

バイト列に対しては,トランスレータはサイズだけを意識し,ビットパターンは解析しません。