# 可変長フォーマット

可変長フォーマットとは、可変長データをフォーマット形式として扱うことのできる方法です。可変長フォーマットには「可変長のデリミタ指定」と「可変長の項目参照」があります。

= 備考 =

可変長フォーマットは、「項目タイプ」が"9"、"X"、"M"、"N"、"I"、"D"、"Z"のいずれかの場合にのみ指定できます。

(1) 可変長のデリミタ指定

データ区切りの識別用に任意のコードを指定し、この識別用コードを可変長データの終わりに必ずつけます。このような形式で指定する可変長フォーマットを「可変長のデリミタ指定」と呼びます。

たとえば、テキスト形式ファイルは、データ区切りの識別コードを改行コードとした可変長フォーマットと考えられます。

「可変長のデリミタ指定」はフォーマット情報の「固定長／可変長」で選択し、データ区切りの識別コードである「デリミタ値」と「デリミタ値」をカットするかどうかを指定します。

「デリミタ値」に指定するコードは、可変長データには使用されないコードを指定することをお勧めします。

また、入力時にデリミタの「カットする」を未選択の場合は、「可変長データ+デリミタ」がコード変換の対象になり、「デリミタ値」で指定したコードもコード変換されてしまいます。出力時は、コード変換後にデリミタを付加しますのでコード変換の対象にはなりません。

出力側の「デリミタ値」を指定しない場合、可変長データのデータ長がわからなくなってしまいます。データ長を出力するためには、マッピング情報設定画面-出力情報設定画面で、数値演算式 "$LEN()"または"$LENNUM()"を指定する必要があります。マッピング-出力情報の詳細は「DataMagic リファレンスマニュアル」を参照してください。

注意

デリミタにNULL文字（0x00）を使用する場合、入力時にデリミタを「カットする」を設定しないと、そこまでをデータとして判断します（「データ中のNULL文字の扱い」参照）。出力データにNULL文字（0x00）を付加する場合は、出力側の「デリミタ値」を設定してください。

表4.32 デリミタ指定一覧

| 出力側
--- | ---
設定する | 設定しない
入力側 | 「カットする」を未選択 | 入力側のデリミタはカットされずに入力データとして処理されます。また、入力側にデリミタがない場合は、デリミタが付加されます。 このデリミタはコード変換処理の対象となります。 出力時に出力側のデリミタが付加されます。出力データの項目の終端は出力側のデリミタとなります。 | 入力側のデリミタはカットされずに入力データとして処理されます。また、入力側にデリミタがない場合は、デリミタが付加されます。 このデリミタはコード変換処理の対象となります。 項目の終端はコード変換されたデリミタとなります。
「カットする」を選択 | 出力時に出力側のデリミタが付加されます。 出力データの項目の終端は出力側のデリミタとなります。 | デリミタは付加されません。 出力データは項目の終端が判別できません。

図4.124 可変長のデリミタ指定

(2) 可変長の項目参照

可変長データのデータ長を格納する任意の項目を指定し、この項目の値を参照して可変長データを処理します。このような形式で指定する可変長フォーマットを「可変長の項目参照」と呼びます。

たとえば、Mainframeで使用されている可変長レコードのRDWフィールドと同じ形式です。

「可変長の項目参照」はフォーマット情報の「固定長／可変長」で選択し、データ長を格納する任意の項目である「参照項目名」を指定します。

「参照項目名」に指定する項目は、以下の条件を満たしていなければなりません。

- 「項目タイプ」が"9"、"B"、"F"、"S"、"P"、"Z"であること

  （「F」のときは、小数点以下を切り捨てて計算します）

- 可変長データより前に存在していること

- 第一階層であり、「繰り返し数」が"1"であること

- 有効な項目であること

(3) 入力時の可変長の項目参照

入力時に「可変長の項目参照」を選択する場合は、「倍数項」と「定数項」を指定してください。可変長データのデータ長の計算式を以下に示します。

「参照項目名」で指定された領域に格納されている値 ×「倍数項」＋「定数項」

データ加工は、上記の計算式で計算された値をデータ長として、可変長データを処理します。

図4.125 可変長の項目参照（入力時）

(4) 出力時の可変長の項目参照

出力時に「可変長の項目参照」を指定して入力側→出力側に関係線を結んだだけでは、「参照項目名」で指定した領域に、データ加工後のデータ長は出力されません。データ加工後のデータ長を出力させるには、マッピング情報設定画面-出力情報設定画面で数値演算式"$LEN()"を指定する必要があります。マッピング-出力情報の詳細は「DataMagic リファレンスマニュアル」を参照してください。

図4.126 可変長の項目参照（出力時）