#c# #csv #filehelpers
#c# #csv #filehelpers
Вопрос:
У меня есть анализатор c # CSV, который очень хорошо работает в течение нескольких месяцев. Он использует FileHelpers.CsvEngine для выполнения тяжелой работы. Моя система должна получать CSV-файлы сторонних производителей как есть (очень сложно вернуться к поставщикам и сказать «измените это»). После нескольких месяцев успешного синтаксического анализа CSV я теперь сталкиваюсь с несколькими большими файлами, в которых каждая строка начинается с запятой. И CSV действительно использует значения, разделенные запятыми (не табуляции, пробелы и т.д.).
Вот строка, которая заканчивается:
DataTable dt = CsvEngine.CsvToDataTable(@"c:somefile.csv", ',');
И вот ошибка:
Строка «not является допустимым идентификатором .NET
Вот несколько примеров строк из CSV (первая строка — это заголовок):
,ORG_NO,ORG_REV_NO,ZMODEL,Q_DATE
,7,1,02-8FD10 ,7/21/2009 9:33
,7,1,02-8FD14 ,7/21/2009 9:33
,7,1,02-8FD15 ,7/21/2009 9:33
,7,1,02-8FD18 ,7/21/2009 9:33
Обратите внимание, что первым символом каждой строки является запятая, и это, похоже, затрудняет синтаксический анализатор.
В качестве последнего средства я могу зациклить файл, удалить первый символ, а затем продолжить синтаксический анализ — но есть ли более элегантный / простой способ справиться с этим? Я хотел бы подход, который просто обрабатывает это, вместо того, чтобы заглядывать в каждый CSV перед его анализом, посмотреть, является ли первый символ запятой, а затем использовать альтернативный (и дорогостоящий) путь к коду удаления запятой, если это так.
Есть идеи?
Комментарии:
1. CSV-файлы могут начинаться с запятой. Я подозреваю, что проблема в вашем заголовке;
CsvToDataTable
пытается создать поле без имени . Попробуйте добавить фиктивное имя поля перед первой запятой в заголовке.2. Да, это решило проблему. Большое вам спасибо.