在其字段中使用LineFeeds读取Csv文件

时间:2013-08-13 10:18:05

标签: vb.net csv vb.net-2010

我有这段代码来读取csv文件:

Dim strLineValue As String
Using sr As StreamReader = File.OpenText("FilePath")

strLineValue = sr.ReadLine
      Do While strLineValue IsNot Nothing
          strLineValue = sr.ReadLine
           n += 1
      Loop
End Using

我的问题是我遇到了一个csv文件,其中的行是这样的:

 "Text1 LF LF text2","text3",text4,text5, , , , ,LF 
 "Text6 LF LF text8","text9",text10,text11, , , , ,LF 

其中LF是换行。

所以我得到这样的错误

Text1

text2    text3    text4    text5
Text6

text8    text9    text10   text11

我有什么想法可以克服我的代码在这种类型的文件中的错误行为

PS。 1.如果我在excel中打开csv文件,它会正确识别这些行,它只有一个多行的第一个单元格 2.我在想,也许前两个LF只是LF而我在每一行末尾的LF都是LF和CR,但我怎么能看到差异(我在Word中打开了csv文件来查看字符)

2 个答案:

答案 0 :(得分:1)

您有一些字段用双引号括起来 - "。在CSV文件中,这通常表示您应该占用整个字段而不是解析它。

使用Microsoft.VisualBasic.FielIO.TextFieldParser类非常容易。这是一个例子:

Imports Microsoft.VisualBasic.FileIO

Dim parser As TextFieldParser = New TextFieldParser("TestFile.txt")

parser.Delimiters = New String() {","}
parser.HasFieldsEnclosedInQuotes = True

While Not parser.EndOfData

    Dim fields As String() = parser.ReadFields()

End While

这将保留引用字段中的换行符:

"Text1 LF LF text2" "text3" "text"4 "text5" blank blank blank blank blank

答案 1 :(得分:0)

我会尝试;

strLineValue = strLineValue.replace(vblf,"")

确实看到它的结尾有一个CR ......

您可以在HEX编辑器中看到差异,lf = 10和cr = 13

chr(10) & chr(13) = vbcrlf