c# CSV FILE 如何删除日期已过的行

标签 c# csv

private void Form1_Load(object sender, EventArgs e)
{
     using (StreamReader sr = new StreamReader("1.csv"))
     {
         string headerLine = sr.ReadLine();
         String line;
         while (sr.Peek() != -1) // Just read the first line and do nothing with it... 
         while ((line = sr.ReadLine()) != null)
         {
             string[] parts = line.Split(',');
             string day = parts[3];
             string month = parts[2];
             string year = parts[1];
             string OldDate = (day + "/" + month + "/" + year);
             DateTime dt1 = DateTime.Parse(OldDate);
             DateTime dt2 = DateTime.Now;

             if (dt1.Date >= dt2.Date)
             {
                 MessageBox.Show(dt1 + " still relevant ");                       
             }
             else
             {
                 //  How do I delete rows with a date already passed ?
             }
         }

最佳答案

您可以使用要保留的行重新创建文本文件。要么使用你的 StreamReader并填写 List<string>或者使用这种 LINQ 方法:

List<string> lines = File.ReadLines("1.csv")
    .Select(l => new{ Line = l, Parts = l.Split(',') })
    .Where(x => x.Parts.Length >= 4)
    .Select(x => new {
        x.Line, 
        Day = x.Parts[3].Trim().TryGetInt32(),
        Month =  x.Parts[2].Trim().TryGetInt32(),
        Year =  x.Parts[1].Trim().TryGetInt32(),
    })
    .Where(x => x.Day.HasValue && x.Month.HasValue && x.Year.HasValue)
    .Select(x => new {x.Line, Date = new DateTime(x.Year.Value, x.Month.Value, x.Day.Value) })
    .Where(x => x.Date >= DateTime.Now)
    .Select(x => x.Line)
    .ToList();

File.WriteAllLines("1.csv", lines);

使用了这种扩展方法,它在像这样的 LINQ 查询中派上用场:

public static int? TryGetInt32(this string item)
{
    int i;
    bool success = int.TryParse(item, out i);
    return success ? (int?)i : (int?)null;
}

关于c# CSV FILE 如何删除日期已过的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34872086/

相关文章:

java - 在 Java 中拆分包含额外逗号和额外引号的 CSV 文件

android - 如何在 Android 应用程序中解析 CSV 文件?

python - 使用 python 从 csv 文件读取并放入具有不同字段类型的 Mysql

c# - ASP.NET MVC Controller 单元测试失败

c# - 使用.net core时应该如何存储 Entity Framework 6连接字符串

python - 关于使用 NumPy 数组解析 CSV 文件的查询

java - 如何将 ArrayList<Object> 写入 csv 文件

c# - jBCrypt 0.3 C# 端口 (BCrypt.net)

c# - 如何使用返回类型以List/Array的形式返回结果

c# - 如何将 EF Core 与适用于 .NET 5+ 的 Azure SQL 分片结合使用?