我使用textfieldparser类来读取逗号分隔值(.csv)文件.此文件中的字段用双引号括起,如“Field1”,“Field2”.
因此,要读取文件,我将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","""A"" Block in Building 123"
… textfieldparser工作正常,并正确返回建筑物123中的“A”块.
因此,第一步是告诉生成CSV文件的人创建一个有效的CSV文件,而不是看起来像CSV的东西.
如果你不能这样做,你可能想要在文件中进行两次传递:
>通过将文件转换为“有效”CSV文件来修复该文件(例如,通过用两个引号替换未跟随或前面带引号的引号).>然后,textfieldparser可以毫无问题地解析“有效”的CSV文件.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。