【发布时间】:2021-03-15 10:28:06
【问题描述】:
我有一个 csv,我需要在一个列中读取它包含一个整数值,但值后面有一个空格,所以在 csv 中,值是"1,264 "。
在我的班级里
public int MyValue { get; set; }
但是当我尝试读取记录时,我收到以下错误:
TypeConverterException:无法执行转换。 文本:'1,264' 成员类型:System.Int32 TypeConverter:'CsvHelper.TypeConversion.Int32Converter' IReader 状态:ColumnCount:0 CurrentIndex:26 HeaderRecord:
显然我需要修剪该字段中的空白区域。我无法控制初始格式的格式。
我可以使它成为一个字符串属性并在第二遍解析它,但我想看看是否有其他方法。
更新
我尝试删除空格,但仍然出现错误。我原以为这可能是文化信息问题,当我阅读时,我有以下代码:
using (var reader = new StreamReader(@"C:\temp\file.csv"))
using (var csv = new CsvReader(reader, new CsvConfiguration(new CultureInfo("en-US")) {
TrimOptions = TrimOptions.Trim
})) {...}
更新 2
考虑一个包含单列单行标题的文件(除了标题):
MyValue
"1,264 "
更新 3
我当前的语言环境规定逗号是小数分隔符,点是千位分隔符。
【问题讨论】:
-
您确定不是因为文本使用逗号作为小数点,而是您在需要点作为小数点的语言环境中解析它?
-
如果您手动删除空间,您是否仍然收到错误?你确定问题不是那个逗号吗?
-
您说的都对,手动删除逗号并不能修复错误。我在问题中添加了更多信息。
-
你可以试试 TrimOptions = TrimOptions.InsideQuotes 吗?
-
越来越近,TrimOptions.InsideQuotes 修剪了值,但它仍然无法解析它。我正在添加一些示例。