カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

CSVにダブルクォーテーションを簡単に付けるには

CSVファイルで各カラムがダブルクォーテーションで括られていないことがたまにあります。
そんな時、皆さんどうしていますか?
私はテキストエディタでカンマ「,」を「”,”」に置換し、行の先頭と末尾にダブルクォーテーションを付ける・・・ということをいちいちやっていました。
しかし、PowerShellのコマンドを使えば、一発で簡単にダブルクォーテーションを付けることが出来るようなのです。

コマンド例はこちら

Import-Csv -Path "C:\source.csv" -Encoding Default | Export-csv -Path "C:\destination.csv" -Encoding Default -NoTypeInformation

インポートしたCSVの内容をパイプでエクスポート側に渡す、という動作になります。

オプションについて
Encoding 既定値(Default)はutf8NoBOM
ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode,
UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
NoTypeInformation TYPE情報ヘッダーをエクスポートしない

変換元のCSV

ColumnA,ColumnB,ColumnC
1,Ipsum,Sed
2,Magna,Est
3,Clita,Stet

変換後はこのようになります。

"ColumnA","ColumnB","ColumnC"
"1","Ipsum","Sed"
"2","Magna","Est"
"3","Clita","Stet"

但し、数値のカラムに対してもダブルクォーテーションが付けられるので、そこは我慢するしかないようです。

3,467 views

MySQL CSVファイルの入出力

一発で出来て便利な方法を見つけたので、書いておきます。
ただ、入力の場合、フィールド数は同じである必要があります。

【出力】
書式

SELECT * FROM [TABLE] INTO OUTFILE "[ファイルのパス]" FIELDS TERMINATED BY "[区切り文字]" OPTIONALLY ENCLOSED BY '[囲み文字]' LINES TERMINATED BY "[改行コード]";

MySQLで実行する場合

SELECT * FROM [TABLE] INTO OUTFILE "[ファイルのパス]" FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n";

PHPで実行する場合(SQL文以外省略しています)

select * from [TABLE] into outfile \"[ファイルのパス]\" fields terminated by \",\" optionally enclosed by '\"' lines terminated by \"\r\n\"

【入力】

load data infile \"[ファイルのパス]\" into table [テーブル名] fields terminated by \"[区切り文字]\" enclosed by '[囲み文字]' lines terminated by \"[改行コード]\"

MySQLで実行する場合

LOAD DATA INFILE "/tmp/temporary.csv" INTO TABLE TABLE FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n";

PHPで実行する場合(SQL文以外省略しています)

load data infile \"/tmp/temporary.csv\" into table TABLE fields terminated by \",\" enclosed by '\"' lines terminated by \"\r\n\"
4,804 views