Excelの吐くCSVの特徴?

CSVをホゲホゲするツールを書いてると言っておりましたが…わたしまったく気づいてなかったのですが、Excel(2003のみ確認済)の吐くCSVに以下のような特徴があることを社内の人に教えてもらいました ;)

Excelのセルに改行が入っているケース、CSVに変換するとフィールド内に改行が入っているケースです。CSVの改行は、CRLFと一応決まっているのですが…なんと、フィールド内の改行はLFのみなんです :shock:

わたしが使っているエディタで見ると全くわかりませんでした~そこで、バイナリエディタでダンプを見ると確かにLFだけなんです。知りませんでしたよぉ。

一応、CSVは後付けですがRFC4180(日本語訳)で定義されていて、その中のABNF表記を見ると…。

file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
COMMA = %x2C
CR = %x0D ;as per section 6.1 of RFC 2234 [2]
DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2]
LF = %x0A ;as per section 6.1 of RFC 2234 [2]
CRLF = CR LF ;as per section 6.1 of RFC 2234 [2]
TEXTDATA = %x20-21 / %x23-2B / %x2D-7E

確かに問題はないようですね :mrgreen:
この変な :?: Excel出力仕様おかげでフィールド内改行とレコード終端の改行の区別が簡単に実装ができそうです :!: と言うか、Microsoftはわざとそのように実装してるんですかね :?:

所詮CSVのRFCって、後付けだし
Excelの吐くCSVが実質デファクトですもんね。

あぁ、また運用に流されて…RFC的にダメなものを作ってしまった :cry:

TrackBack URL :

No comments yet. Be the first.

Leave a reply