我正在使用C#2005和CSVreader类,除了CSV文件末尾包含空行时,它们都运行良好:
示例:
1,2,3,4,5
2,3,5,6,7
,,,,
我的程序错误,因为此处没有值,问题是并非所有列都包含值,因此下面的2行是有效的。
1,2,,4,5
2,,5,6,7
但是包含,,,的空行不会。最后一个障碍是我不确定会有多少列。
你怎么建议我测试一个空行?
答案 0 :(得分:2)
这个特殊的CSVReader看起来对遗漏字段有一些很好的处理:
在调用阅读器之前,您可以使用类似的代码处理空行:
csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;
或替换为空字符串:
csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;
然后你可以在读取之后通过循环测试一个空行,如果任何列都是非null,则处理该行。
答案 1 :(得分:0)
阅读整行并向后工作。
答案 2 :(得分:0)
我过去遇到类似问题的方法是在您的CSV阅读器和您正在阅读的实际流/字符串之间使用阅读器。使用中间件来消除垃圾并检查其他行等,以防止读者在一些不好的输入上死亡。
当然,如果内存不是问题,那么您只需阅读整个字符串,更正一次,然后将其输入您的阅读器。
答案 3 :(得分:0)
这是很久以前的一个问题,但问题仍然存在。如果您在NuGet()上使用可用于.NET C#的CSVHelper,则可以使用此代码跳过空白:
SoupToNuts record; //class with same columns found in csv file
List<SoupToNuts> SoupToNutsList = new List<SoupToNuts>();
while (csv.Read())
{
if (!csv.IsRecordEmpty())
{
record = csv.GetRecord<SoupToNuts>();
SoupToNutsList.Add(record);
}
}