Как проанализировать CSV-файл, в котором первым символом каждой строки является запятая?

#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. Да, это решило проблему. Большое вам спасибо.