C#如何使用CSVReader捕获CSV文件中的空行?

时间:2009-01-26 00:02:17

标签: c# csv

我正在使用C#2005和CSVreader类,除了CSV文件末尾包含空行时,它们都运行良好:

示例:

1,2,3,4,5
2,3,5,6,7
,,,,

我的程序错误,因为此处没有值,问题是并非所有列都包含值,因此下面的2行是有效的。

1,2,,4,5
2,,5,6,7

但是包含,,,的空行不会。最后一个障碍是我不确定会有多少列。

你怎么建议我测试一个空行?

4 个答案:

答案 0 :(得分:2)

这个特殊的CSVReader看起来对遗漏字段有一些很好的处理:

A Fast CSV Reader

在调用阅读器之前,您可以使用类似的代码处理空行:

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);
      }
 }