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 2026-09-11

はじめに

少し前に対応した案件の話です。

お客様から

「CSVデータの項目の一つに、改行コードを1つ含む場合がある。
なので、この項目は 改行コードの前後で2つに分けて出力 したい」

例を出すとこんな変換ですね。
Qiita_056-12.jpg

でも、こんな CSVデータって、故意に作れるの?

と疑ってみましたが、Excel ファイルから作った CSV ファイルではアルアルのようですね。

例えば、以下のようなExcelの一覧(2項目の出荷が2日になった)を、

 ファイル > 名前を付けて保存 > CSV (コンマ区切り)(*.CSV) 

で保存すると、なんじゃコレ(囲み文字が中途半端)なCSVファイルが出来ちゃいました。

Qiita_056-01.jpg

そこで、Google Chrome で「Excel csv 出力 囲み文字」と検索すると、AIが概要で

Excelは標準の「CSV保存」機能では、カンマや改行が含まれるセル以外(通常の数値や文字)にダブルクォーテーション(囲み文字)を自動付与しません。
すべての値に囲み文字を付けて出力するには、テキストエディタでの置換やVBA、専用フリーソフトを活用します。

と教えてくれました。

お見せできませんが、お客様から預かったCSVファイルもこんな感じだったので、恐らくExcel生まれのCSVファイルのようです。

ここから下の説明は、DataMagic が普通に扱えることを前提に、ピンポイントで説明しています。

入力項目の出荷日 は 以下のいずれかを想定
 ・一つ目の日付 のみ
 ・一つ目の日付 / 改行コード / 二つ目の日付

改行コードの前後で2つに分けて出力

では、2日になる場合のある 出荷日 を、出荷日1出荷日2 に分けて出力してみます。

色々な方法があると思いますが、私の方法は以下になります。

Qiita_056-02.jpg

1.抽出条件1 で 変数 を編集

:one: まず、変数を2つ用意します。私は以下の2つを用意しました。

変数名 変数タイプ 内容
Flag 数値 改行の有無
出荷日2 文字列 二つ目の日付

:two: 変数:Flag で出荷日 に改行コードが含まれているかを判断します。

改行 処理
含まれている(一致する) 変数:Flagに 1 を代入
含まれてない(一致しない) 変数:Flagに 0 を代入

Qiita_056-03.jpg

判断方法
関数)MATCH_REG{\s,1,0}

:three: 変数:出荷日2 に二つ目の日付を代入します。

Qiita_056-04.jpg

代入方法
関数)REPLACE_REG{^(././.)(\s+)(././.)$,$3}

2.抽出条件2 で 出力ファイル を編集

:four: 品目名は普通に関係線を引きます。

Qiita_056-05.jpg

:five: 出荷日1 に1つ目の出荷日を出力します。

Qiita_056-06.jpg

改行コードを2回に分けて外します。

改行コードはOSや環境によって使い分けられています。

改行コード 意味 使用されるOS 表 現
LF
Line Feed
次の行へ移動する LinuxやmacOSなどのUnix系OS \n
CRLF
Carriage Return + Line Feed
行頭に戻る(CR)と
次の行へ移動(LF)を組み合わせたもの
Windows \r\n

関数)
1行目 = REPLACE_REG{^(././.)(\n)(././.)$,$1} :arrow_left: LFより左を取得
2行目 = REPLACE_REG{/\r/,//}  :arrow_left: CRが有れば削除

:six: 出荷日2 に2つ目の出荷日を出力します。

Qiita_056-07.jpg

関数)IF{\$VAR(Flag)==0,"",$VAR(出荷日2)}

私の実力では、変数:出荷日2を編集する際、出荷日が1日(改行コードを含まない)の場合、一つ目の日付を代入してしまうので、改行の有無を確認し、
・改行がない(変数:Flag=0)場合は、空値を代入
・改行がある(変数:Flag=1)場合は、変数:出荷日2 の値を代入

3.その他の設定

:seven: システム動作環境設定

データ加工設定で「改行を項目の一部として扱う」に :white_check_mark:

Qiita_056-08.jpg

:warning: 当該項目は全体の動作に影響するので、変更する場合は要注意 です:exclamation:

:eight: オプション

「CSV囲み文字無し項目への文字入力」を :record_button: 許可する

Qiita_056-09.jpg

上記の設定以外は、普段通りの設定でOKです。

4.データ加工処理

上手く行けば、こんな結果に :arrow_down:
確認方法 表示結果
プレビュー Qiita_056-10.jpg
メモ帳で開く Qiita_056-11.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?