我有这段代码来读取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文件来查看字符)
答案 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