vb.net – TextFieldParser类
我使用TextFieldParser类来读取逗号分隔值(.csv)文件.此文件中的字段用双引号括起,如“Field1”,“Field2”.
因此,要读取文件,我将TextFieldParser对象的HasFieldsEnclosedInQuotes属性设置为true.但是当任何字段在开头包含双引号(`“)时,我得到MalformedLineException的错误. 示例:“”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文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |