C#如何使用CSVReader捕获CSV文件中的空行?
我使用的是C#2005和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阅读器和您正在读取的实际流/字符串之间使用一个阅读器。使用中
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(记录);
}
}