c#解析谷歌趋势csv没有明显的分隔符

时间:2011-02-13 12:32:13

标签: c# parsing csv delimiter

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

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

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

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

有人有任何想法吗?

3 个答案:

答案 0 :(得分:2)

在我看来,列是用制表符(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]);
        }
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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


  3. enter image description here


    为这种特殊情况编写自己的解析器很简单直接(值中没有转义选项卡):

    1. 打开文件

    2. 略过前5行

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