【问题标题】:C# How to catch empty rows in a CSV file using CSVReader?C# 如何使用 CSVReader 捕获 CSV 文件中的空行?
【发布时间】:2009-01-26 00:02:16
【问题描述】:

我正在使用 C# 2005 和 CSVreader 类,除了 CSV 文件在末尾包含一个空行之外,所有的工作都很好:

例子:

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

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

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

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

您建议我如何测试空行?

【问题讨论】:

    标签: c# csv


    【解决方案1】:

    这个特殊的 CSVReader 看起来可以很好地处理缺失的字段:

    A Fast CSV Reader

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

    csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;
    

    或替换为空字符串:

    csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;
    

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

    【讨论】:

      【解决方案2】:

      阅读整行并向后工作。

      【讨论】:

        【解决方案3】:

        我过去遇到类似问题的方法是在您的 CSV 阅读器和您正在读取的实际流/字符串之间使用阅读器。使用中间体来消除垃圾并检查额外的行等,以防止读者在某些糟糕的输入中死去。

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

        【讨论】:

          【解决方案4】:

          这是很久以前的问题,但问题仍然出现在我面前。如果您在 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);
                }
           }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-01-20
            • 1970-01-01
            • 1970-01-01
            • 2021-03-09
            • 1970-01-01
            • 1970-01-01
            • 2014-01-24
            相关资源
            最近更新 更多