Vb.net 读取字段中包含换行符的Csv文件
我有以下代码来读取csv文件:Vb.net 读取字段中包含换行符的Csv文件,vb.net,csv,vb.net-2010,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 我的问题是,我
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文件以查看字符)我会尝试
strLineValue = strLineValue.replace(vblf,"")
你看,这条线的尽头确实有一个CR
您可以在十六进制编辑器中看到差异,lf=10和cr=13
chr(10) & chr(13) = vbcrlf
有些字段用双引号括起来-
“
。在CSV文件中,这通常表示您应该获取整个字段,而不是解析它
这在课堂上很容易做到。下面是一个例子:
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
这是一个可行的解决方案,但如果有原因,单元格中的数据是多行的,OP可能希望保留格式。你是对的。0A代表LF,0A 0D代表LFCR。所以我有两个LF,然后是一个LFCR。那么我如何在代码中克服这一点。你的代码不工作strLineValue是null@Tim例如他不在乎(显然,我们需要一个空格,而不是LF)问题是并非所有的数据都在quotes@Nianios-这没关系。
TextFieldParser
将处理包含混合字段的行(引号和非引号)。我上面发布的代码示例是在您的示例输入上运行的,我发布的输出是读取字段后第一行的数组元素。对我来说,如果字段没有包含在“”:-(它会将LF视为行尾,一切都会乱七八糟)