DOBON.NET DOBON.NETプログラミング掲示板過去ログ

TextFieldParserクラスによるTextファイルの読み込み

環境/言語:[VB.net2005]
分類:[.NET]

TextFieldParserクラスでTextファイルを読み込む処理を行っています。

http://www.atmarkit.co.jp/fdotnet/dotnettips/487csvparser/csvparser.html

このサンプルを利用しプログラムを作りました。

parser.TextFieldType = FieldType.Delimited
parser.SetDelimiters(",") ' 区切り文字はコンマ
While Not parser.EndOfData
Dim row As String() = parser.ReadFields() ' 1行読み込み
End While

これで以下のような行を読み込むと

"abc",1,"x"yz",2,3,4,"aaa"

"現在の区切り記号を使用して、行 ○○行 を解析できません。"とのエラーが発生します。
原因は文字列に"が入っていることが原因ですがこれを回避しうまくTextファイルを読み込むにはどのようにすればよいでしょうか。

アドバイスお願いいたします。
すいません。例が悪かったです。

"abc",123,"d"ef",456,"g,hi"

以上の文字列を

abc
123
d"ef
456
g,hi

のように最終的にはしたいということです
■No17469に返信(kazuさんの記事)
> "abc",123,"d"ef",456,"g,hi"
>
> 以上の文字列を
>
> abc
> 123
> d"ef
> 456
> g,hi
>
> のように最終的にはしたいということです

CSV形式には明確なルールがありませんので、絶対的に間違っているとまではいえないかもしれませんが、一般的には上記のような書き方は間違っており、ほとんどのアプリケーションで理解されないでしょう。

.NETプログラミング研究第65号でCSV形式について説明していますが、その5番目の決まりに反しています。

.NETプログラミング研究
http://blog.mag2.com/m/log/0000104516/106972814.html

つまり、「"d"ef"」は「"d""ef"」と書くべきです。TextFieldParserもこのような規則で解析しているものと思われます。
■No17477に返信(管理人さんの記事)

なるほど、ルールに沿っていないため解決する方法は難しそうですね。

お客さんからもらったデータが例のような感じだったので固定長、または""のように出力してもらうことができないか依頼してみます。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板