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

C#如何使用CSVReader捕获CSV文件中的空行?,c#,csv,C#,Csv,我使用的是C#2005和CSVreader类,除了CSV文件末尾包含一个空行外,所有这些都可以正常工作: 例如: 1,2,3,4,5 2,3,5,6,7 ,,,, 我的程序错误因为这里没有值,问题是不是所有列都包含一个值,所以下面的两行是有效的 1,2,,4,5 2,,5,6,7 但包含、、、这样的空行不会。最后一个障碍是我不确定会有多少专栏 您建议我如何测试一个空行?阅读整行内容并向后操作。我过去遇到过类似问题的方法是在您的CSV阅读器和您正在读取的实际流/字符串之间使用一个阅读器。使用中

我使用的是C#2005和CSVreader类,除了CSV文件末尾包含一个空行外,所有这些都可以正常工作:

例如:

1,2,3,4,5
2,3,5,6,7
,,,,
我的程序错误因为这里没有值,问题是不是所有列都包含一个值,所以下面的两行是有效的

1,2,,4,5
2,,5,6,7
但包含、、、这样的空行不会。最后一个障碍是我不确定会有多少专栏


您建议我如何测试一个空行?

阅读整行内容并向后操作。

我过去遇到过类似问题的方法是在您的CSV阅读器和您正在读取的实际流/字符串之间使用一个阅读器。使用中间层来消除垃圾,检查是否有额外的行等,以防止读卡器在一些不好的输入上死掉


当然,如果内存不是问题,那么您可以简单地读取整个字符串,更正一次,然后将其输入到您的阅读器中。

这个特殊的CSVReader看起来能够很好地处理缺少的字段:

在调用读取器之前,您可以使用以下代码处理空行:

csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;
或替换为空字符串:

csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;

然后,您可以在读取一个空行后,通过在其上循环来测试它,如果任何列不为空,则处理该行。

这是很久以前的一个问题,但这个问题仍然会出现在我面前。如果您正在使用适用于.NET C#on NuGet()的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);
      }
 }
SoupToNuts记录//使用csv文件中找到的相同列初始化
List SoupToNutsList=新列表();
而(csv.Read())
{
如果(!csv.IsRecordEmpty())
{
record=csv.GetRecord();
SoupToNutsList.Add(记录);
}
}