c # разбор трендов гугл csv без явного разделителя - PullRequest
0 голосов
/ 13 февраля 2011

Я пытаюсь проанализировать CSV-файлы из трендов Google, но между столбцами нет разделителя? Есть ли какой-нибудь способ заставить это работать так, чтобы я мог разбить данные на столбцы после синтаксического анализа, или это лучшее, что я могу сделать, просто поместить каждую строку в один столбец.

Я пробовал множество читателей CSV: http://www.codeproject.com/KB/database/CsvReader.aspx http://www.stellman -greene.com / CSVReader /

Я мог бы попытаться выделить данные в каждой строке, но это кажется очень плохим решением.

Пример CSV-файла из Google трендов: http://www.google.com/trends/viz?q=stackoverflow&date=all&geo=all&graph=all_csv&sort=0&sa=N

У кого-нибудь есть идеи?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2011

Мне кажется, столбцы разделены вкладками (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 голос
/ 13 февраля 2011

Есть две возможные проблемы, по которым эти библиотеки плохо разбираются:

  1. Первые 4 строки могут «обмануть» эти анализаторы, полагая, что есть только 2 столбца

  2. Это на самом деле не CSV (значения, разделенные запятыми) файл, вкладки используются вместо запятых


enter image description here


Легко и просто написать собственный анализатор для этого конкретного случая (в значениях нет экранированных вкладок):

  1. Открыть файл

  2. Пропустить первые 5 строк

  3. Для каждой прочитанной строки разбить ее на \t иполучить значения столбца

1 голос
/ 13 февраля 2011

Мне кажется, что он закодирован в UTF-16 с разделителем табуляции (U + 0009).

...