当前位置 : 主页 > 编程语言 > c语言 >

vb.net – TextFieldParser类

来源:互联网 收集:自由互联 发布时间:2021-06-24
我使用TextFieldParser类来读取逗号分隔值(.csv)文件.此文件中的字段用双引号括起,如“Field1”,“Field2”. 因此,要读取文件,我将TextFieldParser对象的HasFieldsEnclosedInQuotes属性设置为true.但是当任
我使用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","Column2","Column3"
"Value1","Value2","""A"" Block in Building 123"

… TextFieldParser工作正常,并正确返回建筑物123中的“A”块.

因此,第一步是告诉生成CSV文件的人创建一个有效的CSV文件,而不是看起来像CSV的东西.

如果你不能这样做,你可能想要在文件中进行两次传递:

>通过将文件转换为“有效”CSV文件来修复该文件(例如,通过用两个引号替换未跟随或前面带引号的引号).>然后,TextFieldParser可以毫无问题地解析“有效”的CSV文件.

网友评论