0

我有一个 VB .Net winforms 应用程序,它解析 CSV 文件并将解析的行添加到表结构中。

Dim table As New List(Of String())

Using afile As FileIO.TextFieldParser = New FileIO.TextFieldParser(fileName)
    afile.HasFieldsEnclosedInQuotes = True
    afile.TextFieldType = FileIO.FieldType.Delimited
    afile.Delimiters = New String() {","}
    Do While Not afile.EndOfData
        Try
            Dim record As String() = afile.ReadFields()
            table.Add(record)
        Catch ex As FileIO.MalformedLineException
            If ex.Message.Contains("cannot be parsed using the current Delimiters") Then
                Dim textToReplace As String = "(?<!,)""(?!,)"
                Dim fixedString As String = Regex.Replace(afile.ErrorLine, textToReplace, "'")
            End If
        End Try
    Loop
End Using

问题是有时 CSV 格式错误,并且在字符串中间包含双引号。所以像:

123,456,"abcde",100
789,098,"fg"hij",101  <--- problem line
765,432,"klmno",102

这就是为什么我有一个错误处理程序,它可以捕获错误并通过将有问题的双引号转换为单引号来修复它。问题是当我解决问题时,我不知道该行的其余部分是什么。因为线路有问题,所以根本没有读入任何内容。我确实可以通过 Error 对象访问有问题的字段,但仅此而已。不幸的是,即使出现错误,TextFieldParser 还是移到了下一行。有没有办法回到一行?

4

0 回答 0