Как узнать, какие столбцы имеют недопустимое значение
Я использую CsvHelper для анализа CSV-файлов, включая преобразование типов, например, в DateTime.
Когда значение ячейки имеет неверный формат, я получаю
while (CsvReader.Read())
{
var record = CsvReader.GetRecord<TModel>();
csvReader.GetRecord<MyModel>(); //throws following exception:
// CsvHelper.ReaderException: 'An unexpected error occurred.'
// Inner Exception
//
// FormatException: The string 'a' was not recognized as a valid DateTime. There is an unknown word starting at index '0'.
Как найти свойство HeaderName ячейки или свойство MyModel, которое не удалось проанализировать.
2 ответа
Решение
Вы должны добавить попытку, и в вашем улове вы можете получить строку и индекс, используя
int index = csvReader.Context.CurrentIndex; // zero based
int row = csvReader.Context.Row; // 1 based
Тогда вы можете получить свое поле, используя запись заголовков
csvReader.Context.HeaderRecord[index]
Чтобы добавить, что это не работает, вот как я это сделал
catch (ReaderException e)
{
string notification = $"The field { e.ReadingContext.HeaderRecord[e.ReadingContext.CurrentIndex] } has the invalid value { e.ReadingContext.Record[e.ReadingContext.CurrentIndex] }";
}