はじめに
DataMagic では、以下の 8 形式のデータを扱うことが出来ます。
- CSV
- フォーマット
- マルチフォーマット
- 階層フォーマット
- XML
- TEXT
- Excel
- DB テーブル
DataMagic で TEXT 形式以外のデータを扱う場合は、そのデータのレイアウトを定義して、入出力ファイルの設定に使用します。
ここでは フォーマット形式 の定義を登録してみます。
フォーマット形式
ファイル内のすべてのレコードが同一のデータフォーマットである、固定形式のファイルを扱うためのデータ形式です。
Oracle や SQL Server などのデータベースのテーブル定義も、各項目毎に属性や長さ等が決まった フォーマット定義ですよね。
さて、ここまでは《固定長》編 と同じ説明。
ここから先は、可変長 について説明を。
1.固定長と可変長
可変長 についての説明をする前に、AIに〝固定長〟と〝可変長〟の違いについて質問すると、こんな答えが返ってきました。
| 特徴 | 固定長 | 可変長 |
|---|---|---|
| 長さ | 常に一定 (定義された長さ) | データに合わせて変動 |
| データ容量 | 無駄が多い (余る部分も確保) | 無駄が少ない (実データ分のみ) |
| 主な用途 | 社員番号、郵便番号など固定のデータ | 住所、テキストなどの長いデータ |
| 使い分け | データ長が厳密に決まっている場合 | 長さが予測できず、効率的にストレージを使いたい場合 |
妥当な線。目からうろこの回答を期待していたのですが、当たり障りのない回答です。
まぁ、無駄が多い(ブレ幅が大きい)データを格納する場合は、可変長にすると、ファイルの容量を小さくできる(かも)ってことですね。
2.可変長
さて、data-maco が検証に使用するデータと言えば ![]()
そうです
郵便番号データか、農林水産省の統計情報 ![]()
可変長の説明も、やっぱり郵便番号データを使って ![]()
固定長の説明では、各項目のバイト数と項目タイプを以下にしてフォーマットを登録しました。
| 項目名 | バイト数 | 項目タイプ |
|---|---|---|
| 郵便番号 | 7 | X |
| 都道府県名ー漢字 | 8 | N |
| 市区町村名ー漢字 | 20 | N |
| 町域名ー漢字 | 80 | N |
| 都道府県名ー半角カタカナ | 12 | M |
| 市区町村名ー半角カタカナ | 40 | M |
| 町域名ー半角カタカナ | 80 | M |
今回は、「市区町村名」と「町域名」の項目(漢字、半角カタカナ)を可変長 にして、CSV形式からフォーマット形式のデータに変えて出力してみます。
可変長フォーマットは、「項目タイプ」が "9"、"X"、"M"、"N"、"I"、"D"、"Z" のいずれかの場合にのみ指定できます。
また、可変長の指定には 〝デリミタ指定〟と〝項目名指定〟の2種類があります。
今回のレイアウト定義(フォーマット形式)とデータ加工情報は、それぞれ以下の投稿で登録したIDを複写して、内容を🍫ッとだけ変更します。
一から登録する場合も、途中までは同じなので、この投稿を参考にしてください。
可変長(デリミタ指定)
デリミタ(Delimiter)指定
データ区切りの識別用に任意のコードを指定し、この識別用コード(デリミタ(Delimiter))を可変長データの終わりに必ずつけます。
レイアウト定義
フォーマット情報一覧を開き、コピー元のID を選択して 右クリック。「コピー」を選択して、コピー先IDを記入して
登録したIDを開きます。
次に、可変長に変更する「市区町村名ー漢字」(3項目目)をダブルクリックして、項目設定画面を開きます。
「固定長/可変長」をドロップダウンリストから〝可変長(デリミタ指定)〟に変更。
入力側(入力設定で有効)、出力側(出力設定で有効)に、それぞれデリミタ値を〝16進数〟で入力。
また、デリミタ値 は
カットする(出力しない) 。
ちなみに私は、日本語データで使われ無さそうな〝$〟(0x24) をデリミタ値に設定。
町域名ー漢字(No.4)、市区町村名ー半角カタカナ(No.6)、町域名ー半角カタカナ(No.7)も同様の設定変更を行っていきますが、町域名ー半角カタカナ(No.7)のデリミタ値は、改行コード(0x0D0A)に設定。
データ加工
データ加工情報一覧を開き、コピー元のID を選択して 右クリック。
「コピー」を選択して、コピー先IDを記入して
登録したIDを開きます。
今回は、出力側が変更になるので、まず出力ファイルのアイコンをダブルクリックして「出力設定」画面を開きます。
上記のレイアウト定義で登録したファイルIDに変更。
出力先ファイル名を変更。
なお、一旦設定したレイアウト定義(ID)を変更すると、以下のような 確認画面 が表示されます。

今回は、項目名や並び順は変更していないので 〝いいえ〟を選択します。
勿論、〝はい〟を選んでマッピング線を破棄し、一から引き直しても
です。
マッピング設定情報画面を開きます。
確認画面で〝いいえ〟を選択した場合は、関係線がそのまま残った状態です。
今回は出力側を変更したので、出力項目の〝形式〟と〝ID〟が、変更した値になっているか
や、可変長に変更した項目をクリックして、設定値が登録内容通りかを確認
します。
確認後、問題が無ければ、
で閉じます。
問題が有れば 。。。直してから
で閉じましょう。
確認画面で〝はい〟を選択した場合は、関係線を引いて
で閉じます。
設定変更をしているので、[適用]をクリックしてから[実行]をクリックして、データ加工を行います。
今回の出力ファイルを開いてみると、こんな感じ。
デリミタ値($)を紫色 で表示してみました。
可変長の項目は、データの直後にちゃんとデリミタ値($)が付いて可変されてます ![]()
可変長(項目名指定)
項目参照
可変長データのデータ長を格納する任意の項目を指定し、この項目に代入された 値を参照 して可変長データを処理します。
レイアウト定義
先ず、 可変長(デリミタ指定) と同じように、既存のフォーマットIDをコピーして、登録したIDを開きます。
次に、可変長に変更する「市区町村名ー漢字」(3項目目)をダブルクリックして、項目設定画面を開きます。
「固定長/可変長」をドロップダウンリストから〝可変長(項目名指定)〟に変更。
参照項目を設定します。
参照項目名 には、入出力データのデータ長を格納する項目を指定します。
ただ、この時点ではデータ長を格納する項目が無いので、一旦[キャンセル]で画面を閉じて、下図のように赤枠内に 数値タイプの項目を4つ追加します。
レイアウト情報は、
で項目の順番を移動させることができます。
一旦無難なところに参照項目を4つ追加して、上(赤枠内)に移動させてください。
改めて、「市区町村名ー漢字」(7項目目)をダブルクリックして、項目設定画面を開きます。
「固定長/可変長」をドロップダウンリストから〝可変長(項目名指定)〟に変更し、参照項目を設定します。
参照項目名は、右端の
をクリックすると、こんな
選択画面が表示されます。

町域名ー漢字(No.8)、市区町村名ー半角カタカナ(No.10)、町域名ー半角カタカナ(No.11)も同様の設定変更を行って保存します。
データ加工
データ加工も、 可変長(デリミタ指定) と同じように、既存のデータ加工IDをコピーして登録したIDを開き
の設定変更を行います。
マッピング設定情報画面を開きます。
赤枠の4項目にそれぞれのレコード長を設定します(数値演算に「$LEN(項目名)」)。
出力項目の〝形式〟と〝ID〟が、変更した値になっているかや、可変長に変更した項目をクリックして、設定値が登録内容通りかを確認して、保存します。
最後に、今回は出力結果が見易いように、コード変換タブの「レコードごとに改行する」に
を付けます。
設定変更をしているので、[適用]をクリックしてから[実行]をクリックして、データ加工を行います。
先頭の8桁分(赤線の左側)は各可変長データのバイト数が格納され、9桁目(赤線の右側)から、各項目のデータが出力されています。
用途に合わせて、出力ファイルのレイアウトも工夫できます。
以上です。












