尝试使用CsvHelper.GetRecords<T>()
读取具有空行(通常在末尾)的CSV文件。
如果没有空行,这就很好,但是如果CSV文件有空行(定义为、、、、、),它就会抛出TypeConverterException
Text: ''
MemberType: IntelligentEditing.PerfectIt.Core.DataTypes.Styles.StyleRuleType
TypeConverter: 'CsvHelper.TypeConversion.EnumConverter'
我已经阅读了文档(https://joshclose.github.io/CsvHelper/api/CsvHelper.Configuration/Configuration/),并尝试将配置对象设置为IgnoreBlankLines = true
,但没有成功。
简化示例:
public enum ItemTypeEnum
{
Unknown = 0,
Accounts = 1,
HR = 2,
}
public class CsvItemDto
{
public int Id { get; set; }
public string Value { get; set; }
public ItemTypeEnum ItemType { get; set; }
}
.
.
.
var configuration = new Configuration()
{
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
IgnoreBlankLines = true,
};
var csv = new CsvReader(textReader, configuration);
var rows = csv.GetRecords<CsvItemDto>();
if (rows != null)
{
var items = rows.ToList();
//Throws exception here
}
CSV通常包含如下内容:
Id,Value,ItemType
1,This,Unknown
2,That,Accounts
3,Other,HR
,,
,,
我期望IgnoreBlankLines
忽略CSV中的空行,但它没有。有什么想法吗?
4条答案
按热度按时间pepwfjgg1#
@phat.huynh的想法是正确的,只要告诉它跳过任何字段都是空字符串的记录。
vpfxa7rd2#
除了@大卫Specht的回答,新版本更新了delegate
ShouldSkipRecord
。我使用的是28.0.1版本,下面的代码对我有效。gdx19jrr3#
您可以尝试在配置上实现ShouldSkipRecord以选择跳过或不跳过
4szc88ey4#
在
CsvHelper 23.0.0
中,另一种方法是管理读取器异常我们可以记录它,抛出它,绕过它返回false,甚至通过查看异常源来区分行为。