投稿日 | : 2007/03/07(Wed) 09:28 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^5: カンマ区切りのCSVファイルの読み込み |
> この1行分のテキストデータが一定でない(カンマの数が違う)場合が
> あり、上手く読み込めません。
CSV としては奇妙ですね。
RFC4180 にある CSV 仕様 ≪http://www.ietf.org/rfc/rfc4180.txt≫ に従うならば、
行ごとに列数が異なる形式というのは推奨されていないようですし。(不可では無い)
》 Each line should contain the same number of fields throughout the file.
(各行が保持するフィールドの数は、ファイル全体を通じ、同一であるべきである。)
> 読み込んだデータ
> "1ABC,DEF,GHI","JKL,MNO","123,456",3ABC,DEF,GHI"
> "2ABC,DEF,GHI","JKL,MNO","3ABC,DEG,GHI"
> "3ABC,DEG,GHI","3ABC,DEF,GHI"
> "4ABC,DEG,GHI"
これは、データを見直すべきだと思いますよ。そもそも、当初の話では、
> データ中にみカンマが含まれている文字列が存在し、
ということでしたよね。
しかし提示されたデータ形式だと、データ中にカンマを含める事はできないように思えます。
なぜならば、「"」の数が奇数個であるからです。
RFC4180 による公式(≠標準)の CSV 仕様においては、データ両端を「"」で囲む場合に限り、
データ中に「改行(CrLf)」、「"」、「,」を含むことができるとされています。
しかしその場合、データ中の「"」は、判別のために「""」としてエスケープされなければ
ならない(must)とされていますので、『「"」が奇数個』という状況にはなりえないため、
これは『不正な CSV ファイル』として判断されることになります。
もし、この場合の「"」はフィールドを囲んでいるのではなく、データの一部であると
判断するのであれば、CSV ファイルとして利用可能ですが、その場合には、
「"1ABC」「DEF」「GHI"」「"JKL」「MNO"」「"123」「456"」「3ABC」「DEF」「GHI"」
「"2ABC」「DEF」「GHI"」「"JKL」「MNO"」「"3ABC」「DEG」「GHI"」
「"3ABC」「DEG」「GHI"」「"3ABC」「DEF」「GHI"」
「"4ABC」「DEG」「GHI"」
と判断されることになるため、データ中に「,」を含めることができなくなります。
もし、RFC4180 に記載の無い CSV 形式を採用しているのであれば、その仕様を
明確にしていただけないでしょうか。現在提示された情報だけでは、どこからどこまでが
一つのデータであるのか判断する事ができません。