CSV形式に関する諸注意(血涙)
CSV"Comma-Separated Values"形式ファイル.
名前の通り,カンマで区切られた一見単純な形式ですが,これをちゃんと作ってくれない部署があったせいで,仕事上大変なことになった‥というか,なっているので,これについての絶対にやってはダメなポイントをメモ.
なお,以下はいずれも私が喰らって血の涙を流したことがあると付け加えておきます.
一般的な注意
ExcelでCSVファイルを読み込んだ場合は,保存するに際し一考すること.
基本ですね.
ExcelでCSV形式ファイルを開くと,Excel独自の解釈で開いちゃいます.
これを上書き保存なんてしたりすると,‥まぁ,「ファイルが壊れる」と言っても過言ではない事態になります.
改行コード(行の区切りの方)を混ぜるな
これは逆に,どうしてそうなったか知りたいのですが,「CRLF改行」と「LF改行」が混在しているCSVファイルを渡されて,「?」となったことがあります.
こんな変な真似はしないでください.頼みます.
各行のフィールド,およびヘッダの個数を違えるな
これも「どうしてこうなった」感があるのですが,各行のフィールドの個数が違ったりとか,ヘッダの個数と各行のフィールドの個数が違うような嫌がらせはやめましょう‥.
CSVファイルの書き込み時の注意
- 改行コード・二重引用符・カンマを含むフィールドは二重引用符で括れ.
- フィールド内に二重引用符を含む場合,二重引用符でエスケープせよ.
ちなみに,今行きあたっている問題がおそらくこれです.「ありえん!」と思ってたのですが,喰らいました‥.
これをやらないと,どこまでが1フィールドなのか全く分からなくなります‥.
CSVファイルの読み取り時の注意
ぶっちゃけ,適当なパーサーに投げた方が早いのですが,あえて自力で処理する場合は.‥
- 単純に「カンマを区切り文字にして,配列に格納」とかやるなよ!
当たり前の話ですが,「フィールド内にあるカンマを区切り文字にする」という事態になり,破滅的な事態になります.
そのコードを書いたやつには全力で呪いをかけました. - フィールド内に改行コードがある可能性に留意すること.
「テキスト上の1行」と「CSV形式上での1行」が一致していない可能性も考えられるわけで,一応注意が必要です.
もっとも,規約上これを禁止している場合も多いと思うので,その場合は無視してよいのですが. - エスケープされている二重引用符はきちんと元に戻すこと.
- フィールドをかこっている二重引用符は外そう.
意外と注意事項が多いので,「たかがCSV形式でしょう?」とか高をくくっていると死にます.割とマジで.
ちなみに.
CSV形式についてはRFC4180で一応の規格が定められているので,それに従うのが最も無難でしょう.
また,これを読むと,CSV形式がいかに厄介なシロモノかがわかると思います.
ぶっちゃけ,寄越されるならXML形式なりの方が扱いやすいです,ていうかそうしてください神様.