我使用TextFieldParser类来读取逗号分隔值(.csv)文件.此文件中的字段用双引号括起,如“Field1”,“Field2”. 因此,要读取文件,我将TextFieldParser对象的HasFieldsEnclosedInQuotes属性设置为true.但是当任
因此,要读取文件,我将TextFieldParser对象的HasFieldsEnclosedInQuotes属性设置为true.但是当任何字段在开头包含双引号(`“)时,我得到MalformedLineException的错误.
示例:“”Field2“附加”在这里我应该看到“Field2”附加输出.
但是,如果“除了第一个位置之外的任何地方,那么它工作正常
就像“Field2”与“附加”一样完美地工作,并给我Field2“附加”
作为输出.
有没有人有同样的问题?有什么办法可以解决这个问题吗?
这是我的代码:
Private Sub ReadTextFile(ByVal txtFilePath As String) Dim myReader As tfp = New Microsoft.VisualBasic.FileIO.TextFieldParser(txtFilePath) myReader.Delimiters = New String() {","} myReader.TextFieldType = FileIO.FieldType.Delimited myReader.HasFieldsEnclosedInQuotes = True myReader.TrimWhiteSpace = True Dim currentRow As String() Dim headerRow As Integer = 0 While Not myReader.EndOfData Try currentRow = myReader.ReadFields() 'Read Header If (headerRow = 0) Then 'Do work for Header Row headerRow += 1 Else 'Do work for Data Row End If Catch ex As Exception Dim errorline As String = myReader.ErrorLine End Try End While End Sub
这是我在csv文件中的数据:
"Column1","Column2","Column3" "Value1","Value2",""A" Block in Building 123"您的示例“”“块”是格式错误的CSV;因此,TextFieldParser完全有权拒绝它. CSV standard说:
7. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote. For example: "aaa","b""bb","ccc"
如果您正确编码数据,即……
"Column1","Column2","Column3" "Value1","Value2","""A"" Block in Building 123"
… TextFieldParser工作正常,并正确返回建筑物123中的“A”块.
因此,第一步是告诉生成CSV文件的人创建一个有效的CSV文件,而不是看起来像CSV的东西.
如果你不能这样做,你可能想要在文件中进行两次传递:
>通过将文件转换为“有效”CSV文件来修复该文件(例如,通过用两个引号替换未跟随或前面带引号的引号).>然后,TextFieldParser可以毫无问题地解析“有效”的CSV文件.