C# 按日期删除csv行中的多个

C# 按日期删除csv行中的多个,c#,csv,C#,Csv,我的目标是删除csv文件中的多行。我的想法是获取两个日期之间不包括删除的日期。但是,我如何迭代两个日期之间的天数,并将这些值设置为字符串,并用于计算包含此字段的csv文件的代码 private void button2_Click(object sender, EventArgs e) { DateTime start = new DateTime(01 / 25 / 2015); DateTime end = new DateTime(01 / 27 / 2015);

我的目标是删除csv文件中的多行。我的想法是获取两个日期之间不包括删除的日期。但是,我如何迭代两个日期之间的天数,并将这些值设置为字符串,并用于计算包含此字段的csv文件的代码

  private void button2_Click(object sender, EventArgs e)
  {
    DateTime start = new DateTime(01 / 25 / 2015);
    DateTime end = new DateTime(01 / 27 / 2015);

    var dates = new List<DateTime>();

    for (var dt = start; dt <= end; dt = dt.AddDays(1))
    {
      dates.Add(dt);

      var oldLines = System.IO.File.ReadAllLines(txtFileName.Text);
      var newLines = oldLines.Where(line => 
      line.Contains(dates.ToString()));          
      System.IO.File.WriteAllLines(txtFileName.Text, newLines);

      newLines = oldLines.Select(line => new

        {
            Line = line,
            Words = line.Split(' ')
        })
         .Where(lineInfo => lineInfo.Words.Contains(dates.ToString()))
         .Select(lineInfo => lineInfo.Line);
     }
  } 
输入:

员工代码、日期、时间、类型 3434,01/22/2013,07:54,0 3023,01/23/2014,07:54,0 2897,01/24/2015,07:54,0 3734,01/25/2015,07:54,0 3168,01/26/2015,07:54,0 4863,01/26/2015,07:55,0 2513,01/27/2015,07:55,0 2582,01/27/2015,07:55,0

输出:

员工代码、日期、时间、类型 3734,01/25/2015,07:54,0 3168,01/26/2015,07:54,0 4863,01/26/2015,07:55,0 2513,01/27/2015,07:55,0 2582,01/27/2015,07:55,0


非常感谢您的建议、评论、分享代码和想法。

更典型的方法是查看所有行,提取相关部分,将它们转换为实际日期,并将它们与您的开始和结束日期进行定期比较

private void button2_Click(object sender, EventArgs e)
{
    DateTime start = new DateTime(2015,01,26);
    DateTime end = new DateTime(2015,01,27);

    var oldLines = System.IO.File.ReadAllLines(txtFileName.Text);
    var newLines = oldLines
        .Select(line => new { line, date = DateTime.Parse(line.Split(',')[1]) })
        .Where(line => line.date > start and line.date < end)
        .Select(line => line.line)
        .ToArray();

    System.IO.File.WriteAllLines(txtFileName.Text, newLines);
}

这不包括标题行,但您可以单独处理。

如果您包括一个示例输入文件和示例输出文件,其中示例输出文件是您希望在结尾处写入的输出文件,这会有所帮助。是否有理由在写入文件后为换行符赋值?是的,这就是为什么我们可以用空覆盖那些包含日期但不包括所选日期范围的行。我编辑帖子以查看输入和输出。此行出错。Selectline=>new{line,date=DateTime.Parseline.Split','[1]}->显示:System.FormatException:'字符串未被识别为有效的日期时间。这是因为标题行不是日期,而是标题。