0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DataMagic】登録してみた!レイアウト定義_フォーマット形式 《可変長》編〔データ加工もやってみた〕

0
Last updated at Posted at 2026-04-24

はじめに

DataMagic では、以下の 8 形式のデータを扱うことが出来ます。

  • CSV
  • フォーマット
  • マルチフォーマット
  • 階層フォーマット
  • XML
  • TEXT
  • Excel
  • DB テーブル

DataMagic で TEXT 形式以外のデータを扱う場合は、そのデータのレイアウトを定義して、入出力ファイルの設定に使用します。

ここでは フォーマット形式 の定義を登録してみます。

フォーマット形式

ファイル内のすべてのレコードが同一のデータフォーマットである、固定形式のファイルを扱うためのデータ形式です。

Oracle や SQL Server などのデータベースのテーブル定義も、各項目毎に属性や長さ等が決まった フォーマット定義ですよね。

さて、ここまでは《固定長》編 と同じ説明。

ここから先は、可変長 について説明を。

1.固定長と可変長

可変長 についての説明をする前に、AIに〝固定長〟と〝可変長〟の違いについて質問すると、こんな答えが返ってきました。

特徴 固定長 可変長
長さ 常に一定 (定義された長さ) データに合わせて変動
データ容量 無駄が多い (余る部分も確保) 無駄が少ない (実データ分のみ)
主な用途 社員番号、郵便番号など固定のデータ 住所、テキストなどの長いデータ
使い分け データ長が厳密に決まっている場合 長さが予測できず、効率的にストレージを使いたい場合

妥当な線。目からうろこの回答を期待していたのですが、当たり障りのない回答です。

まぁ、無駄が多い(ブレ幅が大きい)データを格納する場合は、可変長にすると、ファイルの容量を小さくできる(かも)ってことですね。

2.可変長

さて、data-maco が検証に使用するデータと言えば :question:
そうです:exclamation: 郵便番号データか、農林水産省の統計情報 :bangbang:

可変長の説明も、やっぱり郵便番号データを使って :book:

固定長の説明では、各項目のバイト数と項目タイプを以下にしてフォーマットを登録しました。

項目名 バイト数 項目タイプ
郵便番号 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を記入して :ok: 登録したIDを開きます。

Qiita_036-01.jpg

次に、可変長に変更する「市区町村名ー漢字」(3項目目)をダブルクリックして、項目設定画面を開きます。

Qiita_036-02.jpg

:one:「固定長/可変長」をドロップダウンリストから〝可変長(デリミタ指定)〟に変更。

:two: 入力側(入力設定で有効)、出力側(出力設定で有効)に、それぞれデリミタ値を〝16進数〟で入力。
また、デリミタ値 は :white_check_mark: カットする(出力しない) 。

ちなみに私は、日本語データで使われ無さそうな〝$〟(0x24) をデリミタ値に設定。

Qiita_036-03.jpg

:three: 町域名ー漢字(No.4)、市区町村名ー半角カタカナ(No.6)、町域名ー半角カタカナ(No.7)も同様の設定変更を行っていきますが、町域名ー半角カタカナ(No.7)のデリミタ値は、改行コード(0x0D0A)に設定。

Qiita_036-04.jpg

データ加工

データ加工情報一覧を開き、コピー元のID を選択して 右クリック。
「コピー」を選択して、コピー先IDを記入して :ok: 登録したIDを開きます。

今回は、出力側が変更になるので、まず出力ファイルのアイコンをダブルクリックして「出力設定」画面を開きます。

Qiita_036-05.jpg

:three: 上記のレイアウト定義で登録したファイルIDに変更。

:four: 出力先ファイル名を変更。

なお、一旦設定したレイアウト定義(ID)を変更すると、以下のような 確認画面 が表示されます。
Qiita_036-06.jpg

今回は、項目名や並び順は変更していないので 〝いいえ〟を選択します。

勿論、〝はい〟を選んでマッピング線を破棄し、一から引き直しても :ok: です。

:five: マッピング設定情報画面を開きます。

確認画面で〝いいえ〟を選択した場合は、関係線がそのまま残った状態です。
今回は出力側を変更したので、出力項目の〝形式〟と〝ID〟が、変更した値になっているか :a: や、可変長に変更した項目をクリックして、設定値が登録内容通りかを確認 :b: します。

Qiita_036-07.jpg

確認後、問題が無ければ、:ok: で閉じます。
問題が有れば 。。。直してから :ok: で閉じましょう。

確認画面で〝はい〟を選択した場合は、関係線を引いて :ok: で閉じます。

:six: 設定変更をしているので、[適用]をクリックしてから[実行]をクリックして、データ加工を行います。

今回の出力ファイルを開いてみると、こんな感じ。
デリミタ値($)を紫色 で表示してみました。
可変長の項目は、データの直後にちゃんとデリミタ値($)が付いて可変されてます :100:

Qiita_036-08.jpg

可変長(項目名指定)

項目参照

可変長データのデータ長を格納する任意の項目を指定し、この項目に代入された 値を参照 して可変長データを処理します。

レイアウト定義

先ず、 可変長(デリミタ指定) と同じように、既存のフォーマットIDをコピーして、登録したIDを開きます。

Qiita_036-01.jpg

次に、可変長に変更する「市区町村名ー漢字」(3項目目)をダブルクリックして、項目設定画面を開きます。

Qiita_036-09.jpg

:seven:「固定長/可変長」をドロップダウンリストから〝可変長(項目名指定)〟に変更。

:eight: 参照項目を設定します。

参照項目名 には、入出力データのデータ長を格納する項目を指定します。
ただ、この時点ではデータ長を格納する項目が無いので、一旦[キャンセル]で画面を閉じて、下図のように赤枠内に 数値タイプの項目を4つ追加します。

Qiita_036-10.jpg

レイアウト情報は、:arrow_up: :arrow_down: で項目の順番を移動させることができます。
一旦無難なところに参照項目を4つ追加して、上(赤枠内)に移動させてください。

改めて、「市区町村名ー漢字」(7項目目)をダブルクリックして、項目設定画面を開きます。

Qiita_036-11.jpg

「固定長/可変長」をドロップダウンリストから〝可変長(項目名指定)〟に変更し、参照項目を設定します。

参照項目名は、右端の :mag_right: をクリックすると、こんな :arrow_heading_down: 選択画面が表示されます。
Qiita_036-12.jpg

町域名ー漢字(No.8)、市区町村名ー半角カタカナ(No.10)、町域名ー半角カタカナ(No.11)も同様の設定変更を行って保存します。

Qiita_036-13.jpg

データ加工

データ加工も、 可変長(デリミタ指定) と同じように、既存のデータ加工IDをコピーして登録したIDを開き :three: :four: :five: の設定変更を行います。

:nine: マッピング設定情報画面を開きます。

赤枠の4項目にそれぞれのレコード長を設定します(数値演算に「$LEN(項目名)」)。

Qiita_036-14.jpg

出力項目の〝形式〟と〝ID〟が、変更した値になっているかや、可変長に変更した項目をクリックして、設定値が登録内容通りかを確認して、保存します。

最後に、今回は出力結果が見易いように、コード変換タブの「レコードごとに改行する」に :white_check_mark: を付けます。

:ten: 設定変更をしているので、[適用]をクリックしてから[実行]をクリックして、データ加工を行います。

今回の出力ファイルを開いてみると、こんな感じ。
Qiita_036-15.jpg

先頭の8桁分(赤線の左側)は各可変長データのバイト数が格納され、9桁目(赤線の右側)から、各項目のデータが出力されています。

用途に合わせて、出力ファイルのレイアウトも工夫できます。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?