CSVHelper 指数用逗号代替点
CSVHelper Exponent with comma instead dot
我正在使用 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;
}
我不知道是否存在某种方法可以使用逗号而不是点来解析单元格中的值:/
谢谢
您已经为 decimal
设置了号码配置,但您的 属性 类型是可为空的 (decimal?
)。如果您有任何不可为空的 decimal
属性,请添加以下行,或者如果您只有可空版本 (decimal?
),请替换现有的行(请注意 ?
下面的代码)
csv.Configuration.TypeConverterOptionsCache.GetOptions<decimal?>().NumberStyle =
NumberStyles.Number | NumberStyles.AllowDecimalPoint |
NumberStyles.AllowExponent | NumberStyles.AllowLeadingSign;
我正在使用 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;
}
我不知道是否存在某种方法可以使用逗号而不是点来解析单元格中的值:/
谢谢
您已经为 decimal
设置了号码配置,但您的 属性 类型是可为空的 (decimal?
)。如果您有任何不可为空的 decimal
属性,请添加以下行,或者如果您只有可空版本 (decimal?
),请替换现有的行(请注意 ?
下面的代码)
csv.Configuration.TypeConverterOptionsCache.GetOptions<decimal?>().NumberStyle =
NumberStyles.Number | NumberStyles.AllowDecimalPoint |
NumberStyles.AllowExponent | NumberStyles.AllowLeadingSign;