2010-03-09 3 views
1

Я знаю, что есть несколько библиотек кода, которые могут разбирать CSV-файлы в соответствии со стандартом, но по разным причинам мне нужна одна простая процедура (а не целая библиотека), которая анализирует CSV в DataTable или массив. Существует ли такое животное или оно исчезло? (Предпочтительно C#, но я могу перевести и vb.net)CSV Parser в одной рутине/функции?

+1

Мне любопытно, что вы подразумеваете под «стандартом». Насколько мне известно, для CSV нет стандарта. Именно поэтому вы не должны пытаться закодировать свой собственный парсер - вы не хотите быть тем, кто имеет дело с неустранимым CSV всех остальных, пусть кто-то другой это сделает. Какие «различные причины» оправдывают себя, беря на себя это бремя? – Aaronaught

+0

[Лучшие 6 способов разобрать .CSV? Высокая производительность!] (Http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html) –

ответ

2

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

Если вы хотите, чтобы разобрать CSV с помощью LINQ, вот простой пример:

http://www.fryan0911.com/2009/05/read-data-from-csv-using-linq.html

+0

Но см. Http://www.secretgeek.net/csv_trouble. асс первым! –

+0

... и затем используйте поддержку CSV, встроенную в платформу .NET, и поддерживаемую Microsoft. http://stackoverflow.com/questions/2405787/csv-parser-in-one-routine-function/2405898#2405898 – MarkJ

5

Reference Microsoft.VisualBasic.FileIO и вы можете использовать TextFieldParser

using (var parser = 
    new TextFieldParser(@"c:\data.csv") 
     { 
      TextFieldType = FieldType.Delimited, 
      Delimiters = new string[] { "," } 
     }) 
{ 
    while (!parser.EndOfData) 
    { 
     string[] fields; 
     fields = parser.ReadFields(); 
     //go go go! 
    } 
} 
0

Дать свой собственный CSV парсер не легко. Есть много крайних случаев, с которыми вы столкнетесь.

Read: http://www.secretgeek.net/csv_trouble.asp

@ ответ Спендера, вероятно, ближе вы получите, используя встроенный в материал.

Дайте CsvHelper попытку (библиотека, которую я поддерживаю). Он доступен на NuGet. Это очень легкий вес. Если вы просто хотите немного кода, вы можете просто скопировать источник CsvParser.cs и немного изменить его. Существует, в основном, одна функция, которая выполняет весь синтаксический анализ, который составляет более 100 строк, включая комментарии. Если вам нужна единая рутина, это было бы неплохо схватить.

Если вы используете библиотеку CsvHelper, чтение в коллекции пользовательских объектов класса легко.

var streamReader = // Create StreamReader to your CSV file. 
var csvReader = new CsvReader(streamReader); 
var myObjects = csvReader.GetRecords<MyObject>(); 
Смежные вопросы