【发布时间】:2020-12-22 13:02:29
【问题描述】:
我正在使用 CSVHelper,但我不知道如何解决这个问题。
问题: 我正在尝试读取带有“3,23E+11”之类数字的 CSV,但出现此错误:
The conversion cannot be performed.
Text: '3,27E+11'
MemberType: System.Nullable`1[[System.Decimal, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]
TypeConverter: 'CsvHelper.TypeConversion.NullableConverter'
我需要用逗号而不是点来读取它。
我已经尝试过改变文化信息
public IEnumerable<DTO> ReadFile(Task<Stream> file)
{
IEnumerable<DTO> records;
CultureInfo nfi = new CultureInfo("de-DE", false);
nfi.NumberFormat.NumberDecimalSeparator = ",";
using (var reader = new StreamReader(file.Result))
using (var csv = new CsvReader(reader, nfi))
try
{
csv.Configuration.PrepareHeaderForMatch = (header, index) => header.Trim();
csv.Configuration.TrimOptions = TrimOptions.Trim;
csv.Configuration.TypeConverterOptionsCache.GetOptions<decimal>().NumberStyle = NumberStyles.Number | NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent | NumberStyles.AllowLeadingSign;
csv.Configuration.BadDataFound = null;
csv.Configuration.MissingFieldFound = null;
csv.Configuration.Delimiter = ";";
csv.Configuration.RegisterClassMap<CSVMapper>();
records = csv.GetRecords<DTO>().ToList();
}
catch (Exception e)
{
throw e;
}
return records;
}
我不知道是否存在某种方法来使用逗号而不是点解析单元格中的值:/
谢谢
【问题讨论】:
-
你能贴几行 CSV 文件吗?
-
您是否尝试过将
csv.Configuration.CultureInfo设置为使用逗号作为小数分隔符的区域性? stackoverflow.com/questions/55076433/… -
您能分享
CSVMapper、DTO和一个示例CSV 文件吗?