- PR -

改行コードを含んだCSVファイルの読み込みについて

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-07-16 16:16
正規表現を使って楽にできたりしますかね。
(というかどこかに載ってないかな)

RFCにあったんだ、と思ったら最近公開されたんですね。
それでも「CSVの仔細な解説となる公式な仕様は、存在しない」と書いてありますね。

The last field in the record must not be followed by a comma
これは私も、最後のフィールドの後にカンマがあってはいけないということで
↓これはアリな気がしています。
aaa,bbb,ccc,
ddd,xxx,yyy,zzz
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-07-17 11:44
ここだと、Jubeiさんがコードを載せてくれていたような気がする。:

わんくま同盟の宣伝をすると、
http://naka.wankuma.com/site/library/dotnet1.1/
こんなところにあったりする。


追加:
なんにしても、
レコードの区切りが不明で、
かつ、
レコード中に(フィールドの区切りである)改行が含まれているのなら、
フィールド定義が間違っているのか、
レコード中の改行なのかの判別がつけられず、
読み込むためにはどちらかの判定を捨てなければならない、のではないでしょうか。

その辺は、「設計」で何とかするべき問題で、
コードで何とかする問題ではないでしょう。

[ メッセージ編集済み 編集者: Jitta 編集日時 2006-07-17 11:48 ]
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-07-18 10:39
引用:

その辺は、「設計」で何とかするべき問題で、
コードで何とかする問題ではないでしょう。


同意。
たぶん独自のエスケープ文字を定義するでしょうね。(\n)とか。
サードパーティアプリケーションが絡むにしても、そのデータ作成に人間が絡むならそういう規約を作成するでしょう。

TSVって初めて聞いた。。。
「ふいんき」と一緒でCSVでいいんでない?
A氏:入力ファイルはCSVです。
B氏:そうですか。で、区切り文字は?
普通の会話のような気がするが。。。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-18 10:45
区切り文字はカンマに決まってるだろう的人もいるのでやめた方がいいね。
TSVといいましょう。わからなければ「何それ?」って言ってくるだろうし。
http://e-words.jp/w/TSV.html
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-07-18 10:51
paniponi-xさん、お早うございます。

引用:

ですから、「フィールドに改行を含んだらNG」という説の根拠を伺いたかったのです。


これが公認され、規定されているという事は知りませんでした(RFCで規定されているとは…ISOとか、あるいはIEEEとかそっち方面かと思った)。
そういうわけで、私の発言は誤りでしたね。
根拠となる文書を指し示す事は出来ませんが(元もと無いのかも)、CSVとは「項目がカンマで区切られ、レコードが改行で終端された」データ形式の事であると教わりました。その大前提が覆ってしまっては NG だろう、と考えたわけです。

それにしても例えば、こんな↓データをいきなりポロッと受け取ったら、どう解釈すべきなんだろう…。
コード:
123,"ABC
456,DEF
789,GHI"


ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-18 10:58
引用:

きくちゃんさんの書き込み (2006-07-18 10:51) より:
それにしても例えば、こんな↓データをいきなりポロッと受け取ったら、どう解釈すべきなんだろう…。
コード:
123,"ABC
456,DEF
789,GHI"




123, "ABC[改行]456,DEF[改行]789,GHI"
の2カラムだろうねw
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2006-07-18 10:58
すべての実装者が CSV と TSV を自動認識すべきとは思わないですけど、RFC にある次の文は大事だと思います。

原文>Implementors should "be conservative in what you do,
原文>be liberal in what you accept from others" (RFC 793 [8])
原文>when processing CSV files.

訳文>各実装は、CSVの処理において、「自分が何かするときは保守的に。
訳文>他者を受け入れるときは革新的に」(RFC793[8])振舞うべきである。

TSV, CSV の違いなんてのを含む、「CSVとはなんぞや?」というのは、しばしば宗教論争じみてきてしまいますので、使い分けかなと思います。

ユーザと話す時は、誤解が広がらない程度に相手の用語に合わせてもいいと思いますし、仕様書ではきっちり書き分けないといけないでしょうしね。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-07-18 11:25
こんにちは。

なんか例によって(?)質問者が置いてきぼりになってしまっているようでちょ
っと心配ではありますが、これはこれで有意義な議論になっているようで。
(バニラミントさん、見てますか?)

引用:

まどかさんの書き込み (2006-07-18 10:39) より:

TSVって初めて聞いた。。。
「ふいんき」と一緒でCSVでいいんでない?
A氏:入力ファイルはCSVです。
B氏:そうですか。で、区切り文字は?
普通の会話のような気がするが。。。


これに関してはぶさいくろうさんと同じ意見で、CSV でいいと言ってしまうと後々
「CSVって言うからカンマが区切りだと思ったんだよ!タブだなんて聞いてな
いよ〜(ダチョウ倶楽部)」みたいなことになったりするので、曖昧な表記は避
けるべきかと。

曖昧な表記と言えば

引用:

わちゃさんの書き込み (2006-07-18 10:58) より:

訳文>各実装は、CSVの処理において、「自分が何かするときは保守的に。
訳文>他者を受け入れるときは革新的に」(RFC793[8])振舞うべきである。


これにはちょっと久しぶりに目からビーム…もとい目からうろこでした。忘れ
かけていたことを思い出させてもらったというか
基本は仕様書に明示的に書いておいて、それ以外は無保証だけど読めるかも
しれないよ?ぐらいな対応がいいのかも。

とりあえず質問者さんは、事前に CSV ファイルの調査を念入りに行っておく
べきだったかもしれません(それが出来ない場合も多々あるわけですけど)。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。

スキルアップ/キャリアアップ(JOB@IT)