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

如何跳过csv文件中的一些空行并继续读取包含数据的行?c#控制台应用程序,c#,csv,C#,Csv,我的CVS文件中有5列,前两列有3个空行。我想跳过这些空行。我知道我必须循环浏览文件,但我不知道如何执行此过程 如有任何建议,将不胜感激 public class Program { static void Main(string[] args) { var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Santander .csv"); var fileContents = R

我的CVS文件中有5列,前两列有3个空行。我想跳过这些空行。我知道我必须循环浏览文件,但我不知道如何执行此过程

如有任何建议,将不胜感激

public class Program
{
    static void Main(string[] args)
    {
        var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Santander .csv");
        var fileContents = ReadFile(filePath);
        foreach (var line in fileContents)
        {
            Console.WriteLine(line);
        }

        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }

    public static IList<string> ReadFile(string fileName)
    {
        var results = new List<string>();
        var target = File.ReadAllLines(fileName).ToList();
        return results;
    }
}
公共类程序
{
静态void Main(字符串[]参数)
{
var filePath=Path.Combine(Directory.GetCurrentDirectory(),“Santander.csv”);
var fileContents=ReadFile(filePath);
foreach(fileContents中的var行)
{
控制台写入线(行);
}
Console.WriteLine(“按任意键退出…”);
Console.ReadKey();
}
公共静态IList读取文件(字符串文件名)
{
var results=新列表();
var target=File.ReadAllLines(fileName.ToList();
返回结果;
}
}

使用
Where
子句仅保留非
空或空白的行(空、空或仅空白):

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


如果要从文件中获取所有列值,而不获取空值,则:

public static IList<string> ReadFile(string fileName)
{
    File.ReadAllLines(fileName)
        .SelectMany(line => line.Split(','))
        .Where(item => !string.IsNullOrWhiteSpace(item))
        .ToList();
}
公共静态IList读取文件(字符串文件名)
{
File.ReadAllLines(文件名)
.SelectMany(line=>line.Split(','))
.Where(item=>!string.IsNullOrWhiteSpace(item))
.ToList();
}

如果您对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;
}
公共静态IList读取文件(字符串文件名)
{
var results=新列表();
string[]target=File.ReadAllLines(文件名);
foreach(目标中的字符串行)
{
var array=line.Split(“,”);//如果您的csv被分隔为;则将替换为;
如果(!string.IsNullOrWhiteSpace(数组[0])&&!string.IsNullOrWhiteSpace(数组[1])&&array.Length>=2)
结果:添加(行);
}
返回结果;
}
target仍然可以定义为var,但我将其定义为string[],以便更清楚地看到,您可以对数组执行foreach


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

我对空列/行有点困惑-您可以添加一个如何输入的示例吗?第1列、第2列、第3列、第4列、第5列。只有第3列至第5列包含数据第1列和第2列为空。请添加数据示例?您要求删除空行,但从您在此处所说的内容中,它们不是空的:)第1列第2列第3列第4列数据数据请编辑您的问题并将其添加到那里-甚至可能只是打印csv屏幕-更好地解释您需要什么我刚刚意识到这里面可能缺少一些东西。结果从未更新,或者我遗漏了什么。我认为原来的问题也是如此。@RosieC-你是对的。复制了原件,但丢失了:)Fixed@user5813072-就这个问题而言,这个答案解决了你的问题。请考虑将其标记为“解决”和“投票”?我试过这个代码,但是它仍然不影响前两个空行。这个假设行是完全空的。由于吉拉德·格林一直在试图澄清你最初的问题,起初你似乎试图去掉空行,但现在不太确定。可以调整此方法,以便在foreach循环中检查列的内容,并更改if条件以检查前两列是否为空。id只是想删除csv文件中两列中的空行以使其更清晰我不确定是否更清晰,因为“空行”意味着它完全为空,不仅仅是前两列。但是读了与吉拉德·格林的聊天,我想我知道你在找什么。我已经编辑了我的答案。
public static IList<string> ReadFile(string fileName)
{
    File.ReadAllLines(fileName)
        .SelectMany(line => line.Split(','))
        .Where(item => !string.IsNullOrWhiteSpace(item))
        .ToList();
}
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;
}