我正在尝试解析谷歌趋势中的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
有人有任何想法吗?
答案 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)
有两个可能的问题,为什么这些库无法很好地解析它们:
前4行可能 “欺骗”那些解析者相信 只有2列
这不是真正的CSV (Comma-Separated Values)文件,使用标签代替逗号
为这种特殊情况编写自己的解析器很简单直接(值中没有转义选项卡):
打开文件
略过前5行
对于您阅读的每一行,将其拆分为\t
并获取列值