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】ちょっとブレイク!CSVのお困りごとは〝オプション〟と〝出力フォーマット〟で解決!(・・?

0
Last updated at Posted at 2025-12-26

はじめに

DataMagic は、色々な機能を備えています。

機能・概要一覧
機能  概要
マッチング 入力ファイルのレコードと、共通する項目名をキーにした複数のマッチングファイルのレコードを結合し、一つのデータセットとして出力する
マージ 入力ファイルとマージファイルを連結して、入力マージデータとして取り扱えます。入力マージデータに対しては、データ加工前に重複行の削除やソートする
出力先振り分け 抽出条件に沿って、出力ファイルを振り分ける
数値項目演算 出力項目が数値タイプの場合、入力項目同士や任意の値との演算式を指定し、その演算結果を出力項目の値として出力する
データ抽出 入力データから、指定した条件に合致したデータのみを抽出する
項目入替 入力データの項目を入れ替えて、別のフォーマットで出力する
項目結合 複数の項目を結合して、1つの項目として出力する
項目分割 単一項目を分割して、複数の項目として出力する
全角半角 「カナ」「英数字」および「記号」を、半角から全角、全角から半角へ変換する
出力フォーマット指定 日付型、数字文字列型の入力項目を出力する際に、フォーマットを指定する
入力ソート 入力ファイルの形式がCSV、フォーマット、Excelの場合は、データ加工の前にソートする
属性変換 入力データを出力データに変換する際に、数値タイプを任意の数値タイプへ変換する
日付項目演算 日付データに対して、演算や西暦⇔和暦の変換を指定し、その結果を出力項目の値として出力する
関数 入力項目の値を関数で処理し、その処理結果を出力項目の値として出力する
マッピング 入力ファイルから出力ファイルへのデータの流れや加工、変換ルールを定義し、異なるデータ形式間での項目の対応関係を設定する
動的指定 データ加工の実行時にコマンドの引数に指定した数値や文字列を、条件や出力情報に使用できる
ユーザ出口変換 データを加工するときに、項目単位で独自の変換を設定するために、ユーザ出口プログラムを独自に作成できる
データ挿入 レコード内の任意の項目にユーザ指定の任意の値を挿入できる
仕様書出力 データ加工の処理と設定内容を仕様書としてExcelファイルに出力できる
チュートリアル データ加工の設定を対話的に実行して、DataMagicの基本的な操作方法を習得できる
カスタムエラー カスタムエラー条件を使用すると、データの形式は問題ないが、意図しないデータ(例 別の事業所のデータ)を検出したときにデータ加工をエラーにできる
ステップ実行 入力ファイルの読み込み、抽出、およびデータ変換時に発生した、設定とデータの整合性が取れていないことに起因するエラー(システムエラーや設定値不正ではないもの)をスキップする
コード変換 1バイトコード間、または2バイトコード間で、文字コードを変換する

今回の課題

DataMagic で扱えるファイル形式の一つ〝CSV〟。

私もQiitaへの投稿のほとんどで使用していますが、この〝CSV〟ってファイル。一応作成ルールはあるみたいだけれど、柔軟性があり過ぎで、結構いい加減に作られていたりします。

例えば、郵便局のサイトからダウンロードした郵便番号データと、農林水産省のサイトからダウンロードした日別調査のデータを見比べると。

郵便番号データは、項目1、項目2、項目3は半角数字だけれど、ダブルクォーテーション(")で囲んであったりなかったり。
まぁ、項目2は旧郵便番号で下2桁に値が無いものもあるから、文字として囲まれているのは納得ですが、項目1(全国地方公共団体コード)と項目3(郵便番号)で、囲み文字の有り無しの違いは何なんだろう :thinking: とか

Qiita_020-01.jpg

そして、農林水産省の日別調査のデータは、曜日、産地名、品目名が文字なのに囲み文字で囲まれていない :scream: とか

Qiita_020-02.jpg

こんな感じで、ファイルの数だけフォーマット定義があり、想定外のCSVデータもたくさん存在する訳です。

そんな数多あるCSVファイルを思い通りに変身させられるのが :tools: DataMagic :tada:

文字項目を囲み文字で囲む  難易度 ≪低≫

上記で例に挙げた農林水産省の日別調査のデータ。
曜日、産地名、品目名は、何処から見ても文字列なので囲み文字で囲みたい:exclamation:

そんな欲望に駆られた其処の ア・ナ・タ。 DataMagic なら、そんなの朝飯前。
ウルトラマンの3分より早く解決できちゃいます。

難易度と所要時間は、個人の理解度と器用さによって前後します :sweat_smile:

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.入力データ」からコピーしたデータを保存したファイルを指定
ヘッダレコード設定:
チェック :heavy_check_mark: を入れて、1 ~ 1 行に設定

Qiita_020-03.jpg

2.出力ファイルエリアの編集

出力形式=CSV、漢字コード:Shift-JIS

出力設定

以下で説明する項目以外の設定は、初期値を採用します。

レイアウト

ID:
省略
区切り文字、囲み文字 は共に初期値 で設定
ファイル名:
加工結果を出力するファイル名を指定

Qiita_020-04.jpg

3.抽出条件の設定

初期設定のまま使用

4.関係線の設定1〔抽出条件と出力ファイル〕

抽出条件のアイコンを選んで、出力ファイルのアイコンの上にドラッグ&ドロップし、アイコン間の関係線をつなぎます。

5.関係線の設定2〔入力項目と出力項目をマッピング〕

左[入力項目]、右[出力項目]共に12項目追加し、〝順番にマッピング〟を使って左から右へ、上から順に関係線をつなぎます。

Qiita_020-05.jpg

6.オプションの設定

データ加工情報設定画面の右上にある〝オプション〟タブをクリックして設定画面を表示し、『入力動作』の CSV囲み文字なし項目への文字入力 を『許可する』に変更

Qiita_020-06.jpg

7.データ加工処理

すべての設定が終わったので、 最後にIDを登録して、現在表示されている内容で、データ加工を実行します。

出力結果はこちら :arrow_down:
Qiita_020-07.jpg

な、なんと、項目11 の 対前日比(数量)と項目12 の 対前日比(価格)が文字扱いになってる :scream:
それに、項目8 の 産地コード も前ゼロが消えてる(これは出力設定通りなので想定内です)。

では、ココでマッピングの出力フォーマットを使ってチューニング。

項目8:産地コード

 以下で説明する項目以外の設定は、初期値を採用します。
形式:
数字文字列
パディング方法:
右詰+0でパディング
パディングサイズ:
指定する / 3

Qiita_020-08.jpg

項目11:対前日比(数量) と 項目12:対前日比(価格)

 以下で説明する項目以外の設定は、初期値を採用します。
形式:
数字文字列

Qiita_020-09.jpg

上記のチューニングをして、再度実行!

Qiita_020-10.jpg

結果として

項目8:産地コード:
右詰+0 でパディングされて数値を 3桁で出力
1レコード目の産地コードが 3桁の 0 で出力

項目11:対前日比(数量) と 項目12:対前日比(価格):
数値扱いになったので、囲み文字は付いていませんが、0を出力

までチューミングできました。

今回は、入力設定で「囲み文字="」。オプションで「CSV囲み文字なし項目への文字入力 を『許可する』」にしているので、項目に値が無いと文字列ではなく〝数値〟扱いで加工しますが、 DataMagic では、値が空値(空文字)になる場合、「0 を代入して数値として出力」か「空文字のまま文字列として出力」のいずれかを選択する仕様になっています。

Qiita_020-11.jpg

補足

本編では、曜日や品目、産地名を囲み文字で囲みましたが、品目コードや産地コードも数値では無いので、項目単位で文字列扱いにしたい場合は、以下の設定で対応可です。

形式:
文字列
数値データの前ゼロの扱い:
カットしない

Qiita_020-12.jpg

以上です。

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?