加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – TextFieldParser类

发布时间:2020-12-17 07:22:40 所属栏目:百科 来源:网络整理
导读:我使用TextFieldParser类来读取逗号分隔值(.csv)文件.此文件中的字段用双引号括起,如“Field1”,“Field2”. 因此,要读取文件,我将TextFieldParser对象的HasFieldsEnclosedInQuotes属性设置为true.但是当任何字段在开头包含双引号(`“)时,我得到MalformedLin
我使用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文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读