Подтвердить что ты не робот

В CsvHelper как поймать ошибку преобразования и узнать, в каком поле и в какой строке это произошло?

Я успешно использую класс CsvReader и довольствуюсь этим, однако файл, который я потребляю, создается группой, которая меняет форматы столбцов, не сообщая мне.

Итак, на мгновение все работает, затем на следующее утро все ломается, а блок catch try вокруг csv.GetRecord<MyType>() улавливает ошибку и регистрирует ошибку, однако я не могу собрать какую-либо ценную информацию из экземпляра Exception. Он просто говорит: "Преобразование не может быть выполнено". и InnerException ничего не имеет. Не очень полезно. Я даже не знаю, какой из моих 150 столбцов вызывает проблему.

Можете ли вы помочь мне выяснить, как я могу определить, какой столбец в какой строке вызывает проблему?

Спасибо

4b9b3361

Ответ 1

Прежде всего, кажется, что мне нужно поймать CsvTypeConverterException.

 while (csv.Read())
    {
       try
       {    
          var record = csv.GetRecord<MyType>();    
       }
       catch (CsvTypeConverterException ex)
       {
         //ex.Data.Values has more info...
       }
    }

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

Спасибо

Ответ 2

В настоящее время невозможно игнорировать ошибки на уровне поля/свойства. Ваши текущие параметры:

Посмотрите на данные об исключениях.

catch( Exception ex )
{
    // This contains useful information about the error.
    ex.Data["CsvHelper"];
}

Игнорировать исключения чтения. Это на уровне строк, но не в поле. Это позволит полностью прочитать весь файл и просто игнорировать строки, которые не работают. Вы можете получить обратный вызов при возникновении исключения.

csv.Configuration.IgnoreReadingExceptions = true;
csv.Configuration.ReadingExceptionCallback = ( ex, row ) =>
{
    // Do something with the exception and row data.
    // You can look at the exception data here too.
};