我希望能够遍历CSV文件中的所有记录,并将所有好的记录添加到一个集合中,并单独处理所有“坏”的记录。我好像做不到,我想我一定错过了什么。
如果我试图捕获BadDataException,那么后续的读取将失败,这意味着我无法继续读取文件的其余部分-
while (true)
{
try
{
if (!reader.Read())
break;
var record = reader.GetRecord<Record>();
goodList.Add(record);
}
catch (BadDataException ex)
{
// Exception is caught but I won't be able to read further rows in file
// (all further reader.Read() result in same exception thrown)
Console.WriteLine(ex.Message);
}
}
讨论的另一个选项是设置BadDataFound回调操作来处理它-
reader.Configuration.BadDataFound = x =>
{
Console.WriteLine($"Bad data: <{x.RawRecord}>");
};
然而,虽然回调被称为不良记录仍然结束了在我的“好名单”
在将记录添加到列表之前,是否有某种方法可以查询阅读器以查看记录是否良好?
对于这个例子,我的记录定义是-
class Record
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
和数据(第一行坏,第二行好)-
"Jo"hn","Doe",43
"Jane","Doe",21
有趣的是,用MissingFieldException处理一个丢失的字段似乎完全符合我的要求--抛出了异常,但后续的行仍然可以正常读取。
2条答案
按热度按时间dhxwm5r41#
这是我提供的example。
tf7tbtn22#
这可以在一次加载整个列表时完成。这是通用实现。见内联注解
注:可根据需要添加更多配置。可以将
options
参数添加到方法中。