我有一个 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 还是移到了下一行。有没有办法回到一行?