2014-11-24 2 views
0

Я пытаюсь разобрать CSV-файл с данными без везения, я попробовал множество инструментов онлайн, и никто не смог правильно проанализировать файл CSV. Меня озадачивает тот факт, что я здесь, прося о помощи, поскольку можно подумать, что синтаксический анализ CSV-данных будет чем-то сверхлегким.Анализ данных CSV

Формат данных CSV, как это:

",95,54070,3635,""Test Reservation"",0,102,0.00,0.00,2014-12-31,""Name of customer"",""$12.34 + $10, special price"",""extra information"",,CustomerName,,,,,1234567890,[email protected],CustomerName,2014-12-31,23:59:59,16,0,60,2,120,0,NULL,NULL,NULL," 

Текущий код:

private void btnOpenFileDialog_Click(object sender, EventArgs e) 
    { 
     DialogResult result = openFileDialog1.ShowDialog(); 

     if (result == DialogResult.OK) 
     { 
      using (StreamReader reader = new StreamReader(openFileDialog1.FileName)) 
      { 
       string line; 

       while ((line = reader.ReadLine()) != null) 
       { 
        ParseCsvLine(line); 
       } 
      } 
     } 
    } 

    private void ParseCsvLine(string line) 
    { 
     if (line != string.Empty) 
     { 
      string[] result; 

      using (var csvParser = new TextFieldParser(new StringReader(line))) 
      { 
       csvParser.Delimiters = new string[] { "," }; 

       result = csvParser.ReadFields(); 
      } 

      foreach (var item in result) 
      { 
       Console.WriteLine(item + Environment.NewLine); 
      } 
     } 
    } 

Переменная результат имеет только один элемент и его:

,95,54070,3635,"Test Reservation",0,102,0.00,0.00,2014-12-31,"Name of customer","$12.34 + $10, special price","extra information",,CustomerName,,,,,1234567890,[email protected],CustomerName,2014-12-31,23:59:59,16,0,60,2,120,0,NULL,NULL,NULL, 
+0

Написав парсер или используя библиотеку. – CodeCaster

+0

Ну, ваш разделитель, кажется, кома в вашем примере, и вы используете вкладку в своей команде split. –

ответ

0
// Add Microsoft.VisualBasic.dll to References. 
using Microsoft.VisualBasic.FileIO; 

// input is your original line from csv. 

// Remove starting and ending quotes. 
input = input.Remove(0, 1); 
input = input.Remove(input.Length - 1); 

// Replace double quotes with single quotes. 
input = input.Replace("\"\"", "\""); 

string[] result; 
using (var csvParser = new TextFieldParser(new StringReader(input))) 
{ 
    csvParser.Delimiters = new string[] { "," }; 
    result = csvParser.ReadFields(); 
} 
+0

Mihai любое другое предложение? – user2595352

+0

@ user2595352, да, только что опубликовал мое редактирование :) вам придется удалить двойные кавычки и заменить их одинарными кавычками. Кроме того, я удалил начальную и конечную цитаты из вашей строки. Это беспорядочно. Возможно, есть еще одно решение. – mihai

+0

Да, похоже, что все правильно! :) Я сбив с толку, почему это похоже на такую ​​сложную задачу, хотя, я имею в виду, я думал, что CSV имеет какой-то стандарт для этого и будет легко читаться. Спасибо вам за помощь! – user2595352

0

Вы можете проверить предыдущую публикацию, с этими надоедливыми запятыми в csv-файлах. Я связываю его here.

Также Mihai, ваше решение хорошо работает только для одной линии, но будет терпеть неудачу, если будет много строк для синтаксического анализа.

+0

Нет, я не думаю, что это провалится. Просто извлеките решение в функцию, которая принимает одну строку и возвращает строку [] '. Кроме того, ваш пост не является ответом. Вы должны использовать для этого комментарии. – mihai

Смежные вопросы