#c# #.net #csv #csvhelper
#c# #.net #csv #csvhelper
Вопрос:
Я использую CSVHelper для анализа моих CSV-файлов. В моем CSV у меня есть столбец, который содержит двойное значение, но инструмент генерации csv может создать это как пустое поле.
Пример CSV
Name,Value,Date
Jim;1.23;20200901
John;;20200901
Поле значения для Jim работает нормально, но когда оно достигает John с пустым значением, я получаю приведенное ниже исключение.
The conversion cannot be performed.
Text: ''
MemberType: System.Double
TypeConverter: 'CsvHelper.TypeConversion.DoubleConverter'
An unexpected error occurred.
Я ничего не могу найти в документации. Я хочу, чтобы пустые поля по умолчанию были равны 0.
Мой код:
public class Transaction
{
public string Name { get; set; }
public double Value { get; set; }
public DateTime Date { get; set; }
}
В этом случае я выполняю следующее, как var result = ParseCsvZipArchiveEntry<Transaction>(zipArchiveEntry);
private List<T> ParseCsvZipArchiveEntry<T>(ZipArchiveEntry zipArchiveEntry) where T : class
{
string TempFilePath = Path.GetTempFileName();
List<T> Result = null;
try
{
zipArchiveEntry.ExtractToFile(TempFilePath, true);
CsvHelper.Configuration.CsvConfiguration Config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
Config.Delimiter = ";";
using (var reader = new StreamReader(TempFilePath))
using (var csv = new CsvReader(reader, Config))
{
Result = csv.GetRecords<T>().ToList();
}
}
catch (Exception ex)
{
Logger(ex.Message);
}
finally
{
if(File.Exists(TempFilePath))
File.Delete(TempFilePath);
}
return Resu<
}
Ответ №1:
Вы можете применить Default
атрибут к свойству в вашей модели. Оно объявляется как значение по умолчанию, которое будет использоваться при чтении, когда поле CSV пустое.
using CsvHelper.Configuration.Attributes;
public class Transaction
{
public string Name { get; set; }
[Default(0)] // set to 0 when the field is empty
public double Value { get; set; }
public DateTime Date { get; set; }
}
В моем тестировании это возвращает список из 2 экземпляров транзакции, где второй экземпляр имеет Value
значение 0.
Документация API для этого атрибута найдена здесь.