我正在尝试找出解析此CSV文件的可行方法。目前我正在使用filehelpers,这很棒。但是使用这个csv文件似乎有问题。
csv文件中的每条记录都包含在引号中,并以逗号分隔。 记录中有逗号,在我处理的90,000条记录中有1条记录有一个单独的"这会破坏Readline。
记录看起来像这样" 24" Blah",
所以我想写一个正则表达式插入到BeforeReadRecord中,它将通过并替换"的所有实例。有空间。
我对正则表达式更新,但我没有找到任何方法排除三个案例。 案例一:每行以" 案例二:每一行以" 案例三:每个字段由","
分隔我试图找出如何排除这三种情况,并留下来替换任何落后者" 。
到目前为止,我一直在悲惨地失败,甚至不确定是否有办法实现这一目标。也许有人知道一个更好的csv解析器来处理这个奇怪的情况呢?
编辑:嗯,这就是我最终的结果。它需要一点时间来处理(也只是改变任何异常值"这很好,因为任何查询都需要包含引号的数据)但是要找到我可能陷入困境的任何陷阱更快,但它似乎是迄今为止最快的解决方案(对于92,000条记录花费了大约7秒)但是似乎没有任何方法可以检查每一行所以...我以前的解决方案是一个令人讨厌的嵌套,如果它似乎30在处理记录的过程中大约几秒钟。它解决了所有场景,除了某人决定在场地末尾放置一个随机的场景......希望我不会遇到这样的记录,但它不会让我感到惊讶in its own method{
engine.BeforeReadRecord += (sender, args) =>
args.RecordLine = checkQuote(args.RecordLine);
var records = engine.ReadFile(reportFilePath);
}
private static string checkQuote(string checkString)
{
if (checkString.Substring(0, 1) == @"""")
{
string removeQuote = @"""" + checkString.Replace(@"""", "'").Replace(@"','", @""",""").Remove(checkString.Length-1,1).Remove(0,1) + @"""";
return removeQuote;
}
else
return checkString; }