我的CVS文件中有5列,前两列有3行空行。我想跳过这些空行。我知道我必须遍历文件,但我不知道如何进行此过程。
任何建议都会受到赞赏。
ynA4_val
答案 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的解决方案。我不熟悉它,所以它不是我想到的第一个解决方案,但我认为值得熟悉。