【问题标题】:c# parse google trends csv no apparent delimiterc#解析谷歌趋势csv没有明显的分隔符
【发布时间】:2011-02-13 12:32:13
【问题描述】:

我正在尝试从谷歌趋势中解析 csv 文件,但列之间似乎没有任何分隔符?有什么办法可以让这个工作,这样我就可以在解析后将数据分成列,或者我能做的最好的事情就是让每一行都在一列中。

我尝试了许多 csv 阅读器: http://www.codeproject.com/KB/database/CsvReader.aspx http://www.stellman-greene.com/CSVReader/

我可以尝试对每一行中的数据进行子串化,但这似乎是一个非常糟糕的解决方案。

来自谷歌趋势的示例 csv 文件: http://www.google.com/trends/viz?q=stackoverflow&date=all&geo=all&graph=all_csv&sort=0&sa=N

有人有什么想法吗?

【问题讨论】:

    标签: c# parsing csv delimiter


    【解决方案1】:

    在我看来,这些列是用制表符 (U+0009) 分隔的,不是吗?做吧

    using (var reader = new StreamReader(@"trends.csv", true))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            var items = line.Split('\t');
            if (items.Length == 3) // recognizing the header etc. left as an exercise for the reader
            {
                Console.WriteLine("Date: {0}, value = {1}, error = {2}", items[0], items[1], items[2]);
            }
        }
    }
    

    【讨论】:

    • 谢谢,您为我节省了大量时间。我不知何故盲目地错过了分隔符是制表符。太棒了
    【解决方案2】:

    在我看来它是用 UTF-16 编码的,带有制表符 (U+0009) 的分隔符。

    【讨论】:

      【解决方案3】:

      这些库无法很好地解析它有两个可能的问题:

      1. 前 4 行可能 “欺骗”那些解析器相信 只有两列

      2. 这不是真正的CSV (Comma-Separated Values) 文件,使用制表符代替逗号



      为这种特殊情况编写自己的解析器既简单又直接(值中没有转义的制表符):

      1. 打开文件

      2. 跳过前 5 行

      3. 对于您阅读的每一行,将其除以\t 并获取列值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多