如何跳过csv文件中的空行并继续读取数据行? c#console应用程序
我的CVS文件中有5列,前两列有3个空行。我想跳过这些空行。我知道我必须通过文件循环,但我不知道如何执行此过程。如何跳过csv文件中的空行并继续读取数据行? c#console应用程序
任何建议,将不胜感激。
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;
}
}
使用Where
子句只保留不NullOrWhiteSpace
(null,为空或只是空格)行:
public static IList<string> ReadFile(string fileName)
{
return File.ReadAllLines(fileName)
.Where(line => !string.IsNullOrWhiteSpace(line))
.ToList();
}
更好地了解你是什么之后再后:对于每行使用Split
来获得不同的列,然后检查前2个是否为空:
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();
}
改为语法查询,只是因为在我看来,这是cleaer当我们开始需要的东西像let
如果你想要的是得到从文件中的所有列的值没有空的,则:
public static IList<string> ReadFile(string fileName)
{
File.ReadAllLines(fileName)
.SelectMany(line => line.Split(','))
.Where(item => !string.IsNullOrWhiteSpace(item))
.ToList();
}
我刚刚意识到这可能会有一些缺失。结果永远不会更新,或者我错过了一些东西。我认为在原始问题中也是如此。 – RosieC
@RosieC - 你是对的。复制原来的,并错过了:)固定 –
@ user5813072 - 编辑,以适应需要 –
如果你对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;
}
目标仍然可以定义为无功,但我把它定义为字符串[]使它更加明显,那么你可以做的foreach在阵列上。
不过我喜欢Gilad Green的解决方案,使用Linq。我不太熟悉它,所以它不是我想到的第一个解决方案,但我认为值得熟悉。
我尝试了代码,但它仍然不影响前两个空行 – user5813072
这假设行是完全空的。由于吉拉德格林一直试图澄清你的原始问题,似乎起初你试图摆脱空白的行,但现在并不确定。可以调整此方法,以便在foreach循环内检查列的内容并更改if条件以检查前两列为空。 – RosieC
id就像删除我的csv文件中的2列中的空行一样更清晰 – user5813072
我有点困惑与空的列/行 - 你可以添加一个例子,你的输入是如何? –
column1,column2 column3,column4,column5。只有列3到5包含数据列1和2是空的 – user5813072
您可以添加一个数据示例吗?你问到删除空行但你在这里说什么,他们不为空:) –