Web + Life Hack

〜True But Useless〜

【DB】【CSV】CSVに泣く前に見直したいたった3つのこと。



えっ??今までの俺のCSV力って何だったん?


というぐらい今週はCSVと戦いました。
次はサクッと出来るように
(出来ないとまずい)
勉強になったことを纏めたいと思います。



1・取得したカラムから改行を削除する方法

これはどういった時に使うかというとHTMLのタグや「"\"」(バックスラッシュ)、
といったデータを格納しているカラムも取得対象の場合です。

Replace(Replace({取得対象のカラム名}, Char(13), ""),Char(10), "")


SELECT e.id ,e.created_at, Replace(Replace(j.name, Char(13), ""),Char(10), "")
FROM g08m11 as e
INNER JOIN jobs j ON e.job_id = j.id
WHERE e.created_at BETWEEN '2014-03-01 00:00:00' AND '2014-03-31 23:59:59'
ORDER BY e.created_at asc


2・MySQLの結果をCSVに出力する

今までMySQLからCSVを出力する時は「MySQLワークベンチ」から出力していたのですが
今回はそれが使えなかったのでSQLにて出力しました。

INTO OUTFILE "{出力したいファイル名}" FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '”';



SELECT e.id ,e.created_at, Replace(Replace(j.name, Char(13), ""),Char(10), "")
FROM g08m11 as e
INNER JOIN jobs j ON e.job_id = j.id
WHERE e.created_at BETWEEN '2014-03-01 00:00:00' AND '2014-03-31 23:59:59'
ORDER BY e.created_at asc
INTO OUTFILE "/tmp/g08m11.csv" FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '”';



3・文字コードの変換

CSVファイルで出力する場合はみなさんご存知の通り、Excelでも開きたいというニーズがあります。
しかし、上記の2などで出力したCSVは「UTF-8コード」で出力されて、
Excelのデフォルトの文字コードは「Shift-JIS」。
そうです。
文字化けが発生するのです。
それを防ぐため、文字コードを変換する必要があります。
nkf」で一括変更!

今回はHomebrewで導入。

g08m11$ brew install nkf

==> Downloading http://dl.sourceforge.jp/nkf/53171/nkf-2.1.2.tar.gz
######################################################################## 100.0%==> Patchingpatching 
file Makefile==> 
make==> make install/usr/local/Cellar/nkf/2.1.2: 4 files, 252K, built in 2 seconds



ちゃんと使えそうかチェック

g08m11$ which nkf
/usr/local/bin/nkf


nkfのオプションざっくりまとめ

文字コードには
主に JIS (ISO-2022-JP)、SJIS (Shift_JIS)、EUC-JP の3種類がある。
普通の UNIX では EUC-JP (ただしメール・ネットニュースでは JIS)、
WindowsMac では Shift_JIS がよく使われます。


使い方

「-j 」JIS (ISO-2022-JP) コードに変換

「-s 」SJIS (Shift_JIS) コードに変換

「-e」 EUC-JP (EUC-JP) コードに変換


エクセル対応なので SJIS の「-s」を使用します!

nkf -s {文字コード変換元ファイル} > {文字コード変換先ファイル}


nkf -s UTF_output_data.csv > SJIS_output_data.csv