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

我的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 ReadFile(string fileName) { var results = new List(); var target = File.ReadAllLines(fileName).ToList(); return results; } } 

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

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

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

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

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

 public static IList ReadFile(string fileName) { var results = new List(); 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; } 

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

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