はじめに
DataMagic は、色々な機能を備えています。
機能・概要一覧
| 機能 | 概要 |
|---|---|
| マッチング | 入力ファイルのレコードと、共通する項目名をキーにした複数のマッチングファイルのレコードを結合し、一つのデータセットとして出力する |
| マージ | 入力ファイルとマージファイルを連結して、入力マージデータとして取り扱えます。入力マージデータに対しては、データ加工前に重複行の削除やソートする |
| 出力先振り分け | 抽出条件に沿って、出力ファイルを振り分ける |
| 数値項目演算 | 出力項目が数値タイプの場合、入力項目同士や任意の値との演算式を指定し、その演算結果を出力項目の値として出力する |
| データ抽出 | 入力データから、指定した条件に合致したデータのみを抽出する |
| 項目入替 | 入力データの項目を入れ替えて、別のフォーマットで出力する |
| 項目結合 | 複数の項目を結合して、1つの項目として出力する |
| 項目分割 | 単一項目を分割して、複数の項目として出力する |
| 全角半角 | 「カナ」「英数字」および「記号」を、半角から全角、全角から半角へ変換する |
| 出力フォーマット指定 | 日付型、数字文字列型の入力項目を出力する際に、フォーマットを指定する |
| 入力ソート | 入力ファイルの形式がCSV、フォーマット、Excelの場合は、データ加工の前にソートする |
| 属性変換 | 入力データを出力データに変換する際に、数値タイプを任意の数値タイプへ変換する |
| 日付項目演算 | 日付データに対して、演算や西暦⇔和暦の変換を指定し、その結果を出力項目の値として出力する |
| 関数 | 入力項目の値を関数で処理し、その処理結果を出力項目の値として出力する |
| マッピング | 入力ファイルから出力ファイルへのデータの流れや加工、変換ルールを定義し、異なるデータ形式間での項目の対応関係を設定する |
| 動的指定 | データ加工の実行時にコマンドの引数に指定した数値や文字列を、条件や出力情報に使用できる |
| ユーザ出口変換 | データを加工するときに、項目単位で独自の変換を設定するために、ユーザ出口プログラムを独自に作成できる |
| データ挿入 | レコード内の任意の項目にユーザ指定の任意の値を挿入できる |
| 仕様書出力 | データ加工の処理と設定内容を仕様書としてExcelファイルに出力できる |
| チュートリアル | データ加工の設定を対話的に実行して、DataMagicの基本的な操作方法を習得できる |
| カスタムエラー | カスタムエラー条件を使用すると、データの形式は問題ないが、意図しないデータ(例 別の事業所のデータ)を検出したときにデータ加工をエラーにできる |
| ステップ実行 | 入力ファイルの読み込み、抽出、およびデータ変換時に発生した、設定とデータの整合性が取れていないことに起因するエラー(システムエラーや設定値不正ではないもの)をスキップする |
| コード変換 | 1バイトコード間、または2バイトコード間で、文字コードを変換する |
今回の課題
DataMagic で扱えるファイル形式の一つ〝CSV〟。
私もQiitaへの投稿のほとんどで使用していますが、この〝CSV〟ってファイル。一応作成ルールはあるみたいだけれど、柔軟性があり過ぎで、結構いい加減に作られていたりします。
例えば、郵便局のサイトからダウンロードした郵便番号データと、農林水産省のサイトからダウンロードした日別調査のデータを見比べると。
郵便番号データは、項目1、項目2、項目3は半角数字だけれど、ダブルクォーテーション(")で囲んであったりなかったり。
まぁ、項目2は旧郵便番号で下2桁に値が無いものもあるから、文字として囲まれているのは納得ですが、項目1(全国地方公共団体コード)と項目3(郵便番号)で、囲み文字の有り無しの違いは何なんだろう
とか
そして、農林水産省の日別調査のデータは、曜日、産地名、品目名が文字なのに囲み文字で囲まれていない
とか
こんな感じで、ファイルの数だけフォーマット定義があり、想定外のCSVデータもたくさん存在する訳です。
そんな数多あるCSVファイルを思い通りに変身させられるのが
DataMagic ![]()
文字項目を囲み文字で囲む 難易度 ≪低≫
上記で例に挙げた農林水産省の日別調査のデータ。
曜日、産地名、品目名は、何処から見ても文字列なので囲み文字で囲みたい![]()
そんな欲望に駆られた其処の ア・ナ・タ。 DataMagic なら、そんなの朝飯前。
ウルトラマンの3分より早く解決できちゃいます。
難易度と所要時間は、個人の理解度と器用さによって前後します ![]()
0.入力データ
年,月,日,曜日,品目名,品目コード,産地名,産地コード,数量,価格,対前日比(数量),対前日比(価格)
2025,9,30,火,野菜総計,30000,,,11723774,293,86.0,96.7
2025,9,30,火,野菜総計,30000,北海道,001,4312168,216,,
2025,9,30,火,野菜総計,30000,長 野,020,2321837,213,,
2025,9,30,火,野菜総計,30000,群 馬,010,1547811,165,,
2025,9,30,火,野菜総計,30000,茨 城,008,573643,431,,
2025,9,30,火,野菜総計,30000,青 森,002,508772,285,,
2025,9,30,火,野菜総計,30000,千 葉,012,252413,418,,
2025,9,30,火,野菜総計,30000,岩 手,003,202237,299,,
1.入力ファイルエリアの編集
入力形式=CSV、漢字コード:Shift-JIS
入力設定
以下で説明する項目以外の設定は、初期値を採用します。
レイアウト
- ID:
-
省略
区切り文字、囲み文字 は共に初期値 で設定
※囲み文字=なし にはしないように(データに囲み文字は有りませんが) - ファイル名:
- 上記「0.入力データ」からコピーしたデータを保存したファイルを指定
- ヘッダレコード設定:
-
チェック
を入れて、1 ~ 1 行に設定
2.出力ファイルエリアの編集
出力形式=CSV、漢字コード:Shift-JIS
出力設定
以下で説明する項目以外の設定は、初期値を採用します。
レイアウト
- ID:
-
省略
区切り文字、囲み文字 は共に初期値 で設定
- ファイル名:
- 加工結果を出力するファイル名を指定
3.抽出条件の設定
初期設定のまま使用
4.関係線の設定1〔抽出条件と出力ファイル〕
抽出条件のアイコンを選んで、出力ファイルのアイコンの上にドラッグ&ドロップし、アイコン間の関係線をつなぎます。
5.関係線の設定2〔入力項目と出力項目をマッピング〕
左[入力項目]、右[出力項目]共に12項目追加し、〝順番にマッピング〟を使って左から右へ、上から順に関係線をつなぎます。
6.オプションの設定
データ加工情報設定画面の右上にある〝オプション〟タブをクリックして設定画面を表示し、『入力動作』の CSV囲み文字なし項目への文字入力 を『許可する』に変更
7.データ加工処理
すべての設定が終わったので、 最後にIDを登録して、現在表示されている内容で、データ加工を実行します。
な、なんと、項目11 の 対前日比(数量)と項目12 の 対前日比(価格)が文字扱いになってる ![]()
それに、項目8 の 産地コード も前ゼロが消えてる(これは出力設定通りなので想定内です)。
では、ココでマッピングの出力フォーマットを使ってチューニング。
項目8:産地コード
- 形式:
- 数字文字列
- パディング方法:
- 右詰+0でパディング
- パディングサイズ:
- 指定する / 3
項目11:対前日比(数量) と 項目12:対前日比(価格)
- 形式:
- 数字文字列
上記のチューニングをして、再度実行!
結果として
- 項目8:産地コード:
-
右詰+0 でパディングされて数値を 3桁で出力
1レコード目の産地コードが 3桁の 0 で出力
- 項目11:対前日比(数量) と 項目12:対前日比(価格):
- 数値扱いになったので、囲み文字は付いていませんが、0を出力
までチューミングできました。
今回は、入力設定で「囲み文字="」。オプションで「CSV囲み文字なし項目への文字入力 を『許可する』」にしているので、項目に値が無いと文字列ではなく〝数値〟扱いで加工しますが、 DataMagic では、値が空値(空文字)になる場合、「0 を代入して数値として出力」か「空文字のまま文字列として出力」のいずれかを選択する仕様になっています。
補足
本編では、曜日や品目、産地名を囲み文字で囲みましたが、品目コードや産地コードも数値では無いので、項目単位で文字列扱いにしたい場合は、以下の設定で対応可です。
- 形式:
- 文字列
- 数値データの前ゼロの扱い:
- カットしない
以上です。











