【问题标题】:Parsing a large CSV file, dealing with commas and quotes解析大型 CSV 文件,处理逗号和引号
【发布时间】:2010-10-12 08:39:28
【问题描述】:

我需要加载一个大的 CSV 文件 (>1MB) 并解析它。 通常,这很容易通过首先拆分换行符然后逗号来完成。 问题在于某些条目包含包含自己逗号的字符串。将此电子表格转换为 CSV 时,包含逗号的行用引号括起来。

我编写了一个解析器,它首先转义这些字符串中的所有逗号,然后将其拆分为换行符,然后是逗号,然后再次取消转义值。

对于这么长的字符串,这是一个相当缓慢的过程,因为我需要遍历整个字符串。 有谁知道更快或更优化的处理方法?

【问题讨论】:

    标签: actionscript-3 actionscript string csv


    【解决方案1】:

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

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

    好的 “这个字符串,有一个逗号”,“这个字符串没有” 坏的 这个字符串,有逗号,这个字符串没有

    【讨论】:

    • 您好 Robert,CSV 中任何有自己的逗号的条目都用引号括起来。我会看看 csvlib - 感谢您的链接。
    • 仅供参考,除非 ActionScript 真的很慢,否则解析 1 MB CSV 文件的时间不会超过一秒。
    • 额外的时间是因为我首先将包含在引号中的每个逗号更改为波浪号(并删除引号),然后将字符串拆分为换行符和逗号,然后将每个波浪号都改回来逗号。有没有更好的方法来解决这个问题?
    • 一些 CSV 解析器通过在遇到开引号时设置一个布尔标志(即 IgnoreCommas)并在遇到闭引号时清除该标志来做到这一点。其他人使用正则表达式。 CSVLIB 应该已经做任何必要的事情了。
    【解决方案2】:

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

    【讨论】:

    • 您好霍华德,感谢您的回复。不幸的是,Flash 和 ActionScript 的限制之一是如果您执行脚本超过 15 秒,则会引发错误。此值可以更改,但 SWF 在发生这种情况时完全没有响应,因此这并不理想。目前,我正在使用 Robert Penner 的 Chunker 类分解处理,它至少可以播放加载动画,但我认为必须有更快的方法来做到这一点。我不确定您所说的使用简单的状态机来处理这个是什么意思。
    【解决方案3】:
    • 添加对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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多