アーカイブ : 2012年 9月

CSVファイルの扱い

CSVって、基本的に

・改行コードCRLF
・文字エンコードShift-JIS

であることが多いんだけども、
macintoshで作られたCSVを拝見したらCRだった。

さすがマック。…というべきか?

とりあえず、fopenしてfgetcsvで…とか思ったが、CRだとfgetcsvが上手く動いてくれない
(全てのデータが1行目にあると思われてしまう)
ので、改行コードを先に始末しないといけない。

ついでにUTF-8で書かれているPHPでも文字が読み込めるように
追加でひと手間加えてやる。

// SJISで記載されたCSVはUTF-8環境下では正常に読み込めないので、ここで対応
$buf = mb_convert_encoding(file_get_contents(CSVファイルのパス), “utf-8”, “sjis”);
// 改行コードCRLF、CRをLFに変換
$buf = preg_replace(“(\r\n|\r)”, “\n”, $buf);
// テンポラリファイルとして保存
$fp = tmpfile();
fwrite($fp, $buf);
rewind($fp);

// 1行ずつ処理していく
while($data = fgetcsv($fp))
{
// 各種処理
}

こんな感じで。
まさかCRの改行コードで苦しめられるとは…これっぽっちも考えていなかった。