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

时间:2010-10-12 08:39:29

标签: actionscript-3 actionscript string csv

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

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

答案 2 :(得分: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()