C# 如何在读取时忽略CSV中的空行

C# 如何在读取时忽略CSV中的空行,c#,csv,csvhelper,C#,Csv,Csvhelper,尝试使用CsvHelper.GetRecords()读取具有空行(通常在末尾)的CSV文件 如果没有空行,这是一种享受。但是,如果CSV文件有一个空行(定义为,,,),则它会抛出一个TypeConverterException Text: '' MemberType: IntelligentEditing.PerfectIt.Core.DataTypes.Styles.StyleRuleType TypeConverter: 'CsvHelper.TypeConversion.EnumConve

尝试使用
CsvHelper.GetRecords()
读取具有空行(通常在末尾)的CSV文件

如果没有空行,这是一种享受。但是,如果CSV文件有一个空行(定义为,,,),则它会抛出一个
TypeConverterException

Text: ''
MemberType: IntelligentEditing.PerfectIt.Core.DataTypes.Styles.StyleRuleType
TypeConverter: 'CsvHelper.TypeConversion.EnumConverter'
我已经阅读了文档()并尝试将配置对象设置为
IgnoreBlankLines=true
,但是这没有起作用

简化示例:

公共枚举ItemTypeEnum
{
未知=0,
账户=1,
HR=2,
}
公共类CsvItemDto
{
公共int Id{get;set;}
公共字符串值{get;set;}
公共ItemTypeEnum ItemType{get;set;}
}
.
.
.
var配置=新配置()
{
HasHeaderRecord=true,
HeaderValidated=null,
MissingFieldFound=null,
IgnoreBlankLines=true,
};
var csv=新的CsvReader(文本阅读器,配置);
var rows=csv.GetRecords();
如果(行!=null)
{
var items=rows.ToList();
//在这里抛出异常
}
CSV通常包含以下内容:

Id,Value,ItemType
1,This,Unknown
2,That,Accounts
3,Other,HR
,,
,,

我预期 IGONBRANKANLYS> <代码>忽略CSV中的空白行,但不是。有什么想法吗?

您可以尝试在配置上实现ShouldSkipRecord以选择跳过或不跳过

var配置=新配置(){
HasHeaderRecord=true,
HeaderValidated=null,
MissingFieldFound=null,
IgnoreBlankLines=true,
ShouldSkipRecord=(记录)=>
{
//在这里实现逻辑
返回false;
}
};

@phat.huynh的想法是正确的。只要告诉它跳过所有字段都是空字符串的任何记录

var配置=新配置()
{
HasHeaderRecord=true,
HeaderValidated=null,
MissingFieldFound=null,
ShouldSkipRecord=(记录)=>record.All(字段=>string.IsNullOrEmpty(字段))
};
在中,另一种方法是管理读卡器异常

var conf = new CsvConfiguration(new CultureInfo("en-US"));
conf.ReadingExceptionOccurred = (exc) =>
{
    Console.WriteLine("Error");
    return false;
};

通过查看异常源,可以记录它、抛出它、绕过它并返回false,甚至可以区分行为。

这些只有点的行将被解释为第一列,这是数字输入。无论您如何扭曲,对于裸整数列,这都是非法输入。如果这些只是作为垂直的“…”省略号放在那里,请将它们排除在示例之外。@nyrguds抱歉,我应该明确指出这些点是我没有费心键入的其他行。我会把它们删除。Calsii确实认为,我只是假设这个问题是简单的配置布尔设置。如果没有其他答案出现,我可能会选择这个答案。我建议使用
string.IsNullOrWhiteSpace(field)
,它将覆盖传入CSV流中的空字符和其他不可见字符