【发布时间】:2019-09-05 12:02:53
【问题描述】:
问题
我最近开始了解有关 csvHelper 的更多信息,我需要有关如何实现目标的建议。
我有一个包含一些用户记录(数千到数十万条记录)的 CSV 文件,我需要解析文件并验证/处理数据。我需要做的是两件事:
-
我需要一种方法来在读取整行时对其进行验证
- 记录包含日期范围,我需要验证它是有效范围
- 如果不是,我需要将违规行写入错误文件
-
一条记录也可以在不同的日期范围内多次出现,我需要验证这些范围不重叠,如果重叠,请将整个原始行写入错误文件 p>
我基本上可以用一种方法来保留整个原始行以及解析的数据,但是在原始数据仍然可用时验证整行的方法会更好。
问题
是否有一些事件/操作隐藏在某处,我可以在数据行创建之后但将其添加到集合之前对其进行验证?
如果没有,有没有办法将整个 RAW 行保存到记录中,以便我可以在解析后验证该行,如果它无效,对它们进行我需要的处理?
我拥有的代码
我创建的是这样的记录类:
class Record
{ //simplified and omitted fluff for brevity
string Login
string Domain
DateTime? Created
DateTime? Ended
}
还有一个类图:
class RecordMapping<Record>
{ //simplified and omitted fluff for brevity
public RecordMapping(ConfigurationElement config)
{
//..the set up of the mapping...
}
}
然后像这样使用它们:
public ProcessFile(...)
{
...
using(var reader = StreamReader(...))
using(var csvReader = new CsvReader(reader))
using(var errorWriter = new StreamWriter(...))
{
csvReader.Configuration.RegisterClassMap(new RadekMapping(config));
//...set up of csvReader configuration...
try
{
var records = csvReader.GetRecords<Record>();
}
catch (Exception ex)
{
//..in case of problems...
}
....
}
....
}
【问题讨论】:
-
检查this out
-
@Magnetron 我做到了。它没有显示的是一种针对另一个字段进行验证的方法。我需要在同一行中验证一个日期与另一个日期,而我在 csvhelper 的示例或帮助中没有发现这一点。