- - PR -
改行コードを含んだCSVファイルの読み込みについて
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-15 11:54
何度もすいません、最初の投稿も田中さんのも、後で処理をちゃんとやられているのかもしれませんが、CSV って次のパターンもあるんですよね。
"a,b",c こういうのがあるんで、いきなりカンマとかで split するとはまりますよね。 | ||||||||||||
|
投稿日時: 2006-07-15 12:48
こんにちは。
Comma Separated Value なので、TABや固定長区切りは CSV じゃなく TSV とか他の呼び名があったりするわけですけど ね。 システムでインポートやエクスポートする必要がある場合は、仕様 書にその辺含めてきちんと明記しておきますね。そうしないとオレ オレ仕様(byかつのりさん)の ほにゃらら Separated Value が たくさんやってきて「なんで読めないんだ!」って言われそうです。 (仕様書に書いてあるでしょと言うと「読めるようにしてくれ」と追加 仕様が出てきそうですが) ずーっと昔、管理工学研究所に K3 フォーマットの資料を請求した ことがあって、それの回答 FAX をテキストに起こしたものがなぜ か手元に。 それによると、項目値の中にダブルクォーテーションを使う場合は 二文字連続で書くそうですよ。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||||||
|
投稿日時: 2006-07-16 02:31
フィールドに改行を含むことはRFC(http://www.rfc-editor.org/rfc/rfc4180.txt) でも許されてますけど、CSVとしてNGというのは何を根拠におっしゃられてますか? {quote] 6. Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes. For example: [/quote] | ||||||||||||
|
投稿日時: 2006-07-16 03:19
や、確かに、先ほどテストしてみたらはまりましたw 設計ミスですね・・・orz そもそも、カンマを含んでいる文字列を、ひとつの文字列とするために " で括る訳だから最初に分離しちゃ何にもなりませんね。
さすがに固定バイト長で区切ったファイルも CSV と呼ぶ人は少ない(けどゼロではないw)ですが、TSV を CSV と呼ぶ人は結構おりますです。 #そのたびに、おかゆライス噴出してますw | ||||||||||||
|
投稿日時: 2006-07-16 03:32
きくちゃんさんの仰るNGというのは改行がレコード分離符との区別がつかない状態を指しているのだということだと思いますが。 "data改行data","改行改行"改行 →OK data改行data, 改行改行改行 →NG ってことですよね? | ||||||||||||
|
投稿日時: 2006-07-16 08:59
RFC 4180 なるものがあったのか(そのようなものがあるとは知らなかった〜)、 と思ったのですが、上記のページを見てみると、
と書かれていますよね。 これは、10か月前にできた仕様、ということですよね。 (プロジェクトの完了間際に追加で仕様が知らされるみたい。) 個人的な感想としては、コンマで終わってはいけない、という制約がいやらしく思います。
これだと、最後のフィールドが長さ0の文字列だった場合に表現できないことになります。 (なお、長さ0の文字列とみなすか NULL とみなすかはアプリケーションの勝手だとは思いますが。) あと、個人的な思いとしては CSV は CRLF and comma separated values format であってほしかった。すなわち、まず大前提として改行で行を分離して、その後コンマで列を分離する(だから行の中に改行がない)、という仕様であってほしかったです。 ちなみに、日本語訳もありました。 http://www.kasai.fm/wiki/rfc4180jp -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||
|
投稿日時: 2006-07-16 11:35
CSV って、RFC にあったんですね。
でも、次の文が確かに、微妙な感じですね。 The last field in the record must not be followed by a comma. 最後のフィールドがヌルだったら、"" にしないといけないのかなと思いつつ、 単に最後のカラムの後にカンマを入れちゃいけないってことでは?とも思います。 すいません、英語苦手なもんで。 | ||||||||||||
|
投稿日時: 2006-07-16 15:29
はい。ですが、いきなり湧いて出たものではなくリンクに示されているように これまでの各種の仕様を踏まえて作成されたものであろうとは考えられます。 実際Excelでも(RFCのものとは微妙に違いますが)改行を含むことがあるのは すでに提示されているとおりです。 ですから、「フィールドに改行を含んだらNG」という説の根拠を伺いたかったのです。
まあある意味現状追認のRFCですから、それだけ改行を含むCSVファイルが 使われているということではないでしょうか? あと、カンマで終わってはいけないという文ですが、セクション2の末尾にある ABNF表記のものを(機械的に)解釈すると、カンマで終わっても(直後に 空のフィールドあり)、vaildととれなくもないような気がします。 |