Существует ли "правильный" способ чтения CSV файлов

Возможный дубликат:
Импорт файлов CSV в .Net

В .net есть ли стандартная библиотека, которая должна использоваться для чтения в csv файлах? Все образцы в Интернете загружают свой собственный считыватель/парсер csv или используют OleDb.

Это не проблема с использованием каких-либо из этих решений, мне просто интересно, есть ли общепринятая библиотека (не то, что я могу найти), или любой другой "правильный" способ сделать это?

Ответ 1

CsvReader - довольно неплохо... это не Microsoft, но работает очень хорошо, и намного быстрее чем некоторые из альтернатив (устаревший OleDb и т.д.).

Ответ 2

В пространстве имен VB есть класс TextFieldParser. Я знаю, С# людям не нравится ссылаться на библиотеку с этого "базового" языка, но это неплохо.

Он расположен в Microsoft.VisualBasic.FileIO.TextFieldParser

Раньше я работал с OLEDB, создавал файлы определения столбцов и т.д., но нашел TextFieldParser очень простым и удобным инструментом для разбора любых файлов с разделителями.

Ответ 3

Одна из причин, по которой многие пишут сами, состоит в том, что CSV не так просто. Например:

  • В первой строке содержатся имена полей или нет?
  • Поддерживаете ли вы даты? Если, так, они цитируются, окруженные # знаками, в определенный день-месяц-год?
  • Поддерживает ли он строки, которые встречаются внутри значений цитируемого текста? Или это разделяет запись?
  • Как избежать цитаты внутри строки с кавычками? Вы удваиваете цитату или используете обратную косую черту или другой escape-символ?
  • Какие кодировки символов поддерживаются?
  • Как он обрабатывает экранированные управляющие символы? & Амп; #XX; или \uXXXX или какой-либо другой метод?

Вот некоторые из причин, по которым люди пишут свои собственные парсеры, потому что они застряли в чтении файлов, созданных со всеми этими разными настройками. Или они пишут собственные сериализаторы, потому что у целевой системы есть куча этих особенностей.

Если вас не волнуют эти проблемы, просто используйте самую удобную библиотеку. Но поймите, что они там.

Ответ 4

Попробуйте CsvHelper (библиотека, которую я поддерживаю). Он также доступен через NuGet.

CsvHelper позволяет вам читать ваш CSV файл непосредственно в вашем пользовательском классе.

var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();

CsvReader автоматически определит, как сопоставить имена свойств на основе строки заголовка (это настраивается). Он использует скомпилированные деревья выражений вместо отражения, поэтому он очень быстрый.

Он также очень расширяемый и настраиваемый.

Ответ 5

После еще нескольких исследований есть также: http://www.filehelpers.com/

Кажется, полная структура вокруг файлов чтения, а не только файлы csv.

(заметьте: просто прочитайте материал на веб-сайте, еще не использовали его)

Ответ 6

KBCsv - это еще один вариант, особенно если вам нужна эффективность и способность работать с массивными CSV файлами.

Раскрытие: я написал KBCsv, следовательно, "KB";)

Ответ 7

Я уверен, что вы можете прочитать CSV файл в DataTable с одной строкой кода. После этого в DataTable вы можете сортировать, фильтровать, повторять и т.д.

В этом вопросе есть примеры для чтения CSV в DataTables.