Есть ли “надлежащий” способ прочитать файлы CSV [дубликат]

:: поклоны в palmsey и Jon Galloway::

я соглашаюсь с фактором пригодности для обслуживания. Это действительно берет меня немного дольше для получения моих начальных сделанных разметок (так как я - все еще ученик джедая в искусствах CSS), но выполнение полной модернизации веб-сайта на 15 страниц только путем обновления 1 файла является небесами.

17
задан Community 23 May 2017 в 12:08
поделиться

7 ответов

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

18
ответ дан 30 November 2019 в 10:46
поделиться

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

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

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

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

10
ответ дан 30 November 2019 в 10:46
поделиться

Пространство имен VB имеет отличный класс TextFieldParser . Я знаю, что люди, работающие с C #, не любят ссылаться на библиотеки с этого «базового» языка, но это неплохо.

Он находится в Microsoft.VisualBasic.FileIO.TextFieldParser

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

10
ответ дан 30 November 2019 в 10:46
поделиться

После некоторого дополнительного расследования обнаружилось также следующее: http://www.filehelpers.com/

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

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

2
ответ дан 30 November 2019 в 10:46
поделиться

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

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

0
ответ дан 30 November 2019 в 10:46
поделиться

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

Раскрытие: я написал KBCsv, отсюда и «KB»;)

2
ответ дан 30 November 2019 в 10:46
поделиться

Попробуйте 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 автоматически определит, как сопоставить имена свойств на основе строки заголовка (это настраивается). Вместо отражения он использует скомпилированные деревья выражений, поэтому работает очень быстро.

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

7
ответ дан 30 November 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: