如何跳过csv文件中的一些空行并继续读取包含数据的行? c#控制台应用程序

时间:2016-08-15 11:40:44

标签: c# csv

我的CVS文件中有5列,前两列有3行空行。我想跳过这些空行。我知道我必须遍历文件,但我不知道如何进行此过程。

任何建议都会受到赞赏。

ynA4_val

2 个答案:

答案 0 :(得分:2)

使用Where子句仅保留不是NullOrWhiteSpace的行(空,空或仅空格):

public static IList<string> ReadFile(string fileName)
{
    return File.ReadAllLines(fileName)
               .Where(line => !string.IsNullOrWhiteSpace(line))
               .ToList();
}

在更好地了解您所追求的内容之后:对于每一行,使用Split获取不同的列,然后检查前两个列是否为空:

public static IList<string> ReadFile(string fileName)
{
    return (from line in File.ReadAllLines(fileName)
            where !string.IsNullOrWhiteSpace(line)
            let columns = line.Split(',')
            where columns.Length >= 2 && 
                !string.IsNullOrWhiteSpace(columns[0]) &&
                !string.IsNullOrWhiteSpace(columns[1])
            select line).ToList();
}

更改为语法查询只是因为在我看来,当我们开始需要let

之类的东西时它很清晰

如果您想要的是从文件中获取所有列值而不使用空值:

public static IList<string> ReadFile(string fileName)
{
    File.ReadAllLines(fileName)
        .SelectMany(line => line.Split(','))
        .Where(item => !string.IsNullOrWhiteSpace(item))
        .ToList();
}

答案 1 :(得分:0)

如果您对Linq不熟悉/不熟悉,那么另一种方法就是这样。

public static IList<string> ReadFile(string fileName)
{
  var results = new List<string>();
  string[] target = File.ReadAllLines(fileName);
  foreach (string line in target)
  {
    var array = line.Split(','); //If your csv is seperated by ; then replace the , with a ;
    if (!string.IsNullOrWhiteSpace(array[0]) && !string.IsNullOrWhiteSpace(array[1]) && array.Length >= 2)
    results.Add(line);
  }
return results;
}

目标仍然可以定义为var,但我已将其定义为string [],以便更明显地可以对数组进行预测。

然而,我喜欢使用Linq的Gilad Green的解决方案。我不熟悉它,所以它不是我想到的第一个解决方案,但我认为值得熟悉。