首页 文章

解析大型CSV文件,处理逗号和引号

提问于
浏览
1

我需要加载一个大的CSV文件(> 1MB)并解析它 . 通常,首先在换行符和逗号上分割是很容易的 . 问题是虽然有些条目包含包含自己逗号的字符串 . 将此电子表格转换为CSV时,包含逗号的行将用引号括起来 .

我编写了一个解析器,它首先从这些字符串中的所有逗号中删除,然后在换行符和逗号上拆分它,然后再次对值进行转义 .

对于这么长的字符串来说,这是一个非常缓慢的过程,因为我需要迭代整个字符串 . 有谁知道更快或更优化的方法来处理这个?

3 回答

  • 0
    • 添加对 Microsoft.VisualBasic 的引用(是的,它说VisualBasic但它也可以在C#中工作 - 请记住,最后它只是IL)

    • 使用 Microsoft.VisualBasic.FileIO.TextFieldParser 类来解析CSV文件

    以下是示例代码:

    Dim parser As TextFieldParser = New TextFieldParser("C:\mar0112.csv")
        parser.TextFieldType = FieldType.Delimited
        parser.SetDelimiters(",")
    
        While Not parser.EndOfData
            'Processing row    
            Dim fields() As String = parser.ReadFields
            For Each field As String In fields
                'TODO: Process field     
    
            Next
    
        End While
        parser.Close()
    
  • 2

    你看过csvlib了吗?它是ActionScript 3的解析器库 . 它声称可以正确处理带引号的字符串 .

    希望您已将字符串括在引号中,尤其是包含逗号的字符串 . CSV解析器无法区分作为字符串一部分的逗号和分隔两个字符串的逗号,除非字符串在它们周围有引号 .

    Good
        "This string, has a comma", "This string doesn't"
    
    Bad
        This string, has a comma, this string doesn't
    
  • 1

    一次处理文件将减少时间 . 这可以通过使用简单的状态机来处理嵌入在值中的逗号的复杂性来实现 . 问候

相关问题