2017-06-17 39 views
0

追求我在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); 

    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); 
    } 
    } 

输入:

“EmployeeCode”, “日期”, “时间”, “类型”
“3434”, “2013年1月22日”, “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”, “2015年1月27日”, “7点55”, “0”
“2582”, “2015年1月27日”, “7点55”, “0”

OUTPUT:

“EmployeeCode”, “日期”, “时间”, “类型”
“3734”, “2015年1月25日”, “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“

建议,意见,分享代码和想法受到高度赞赏。

+0

如果您包含样本输入文件和样本输出文件(其中样本输出文件是您最喜欢**看到的输出文件),它将有所帮助。 – mjwills

+0

在写入文件之后,是否有一个原因是为'newLines' **赋值? – mjwills

+0

是的,这就是我们可以用空白覆盖那些包含不包括日期选择范围的日期的行的原因。我编辑我的帖子以查看输入和输出。 – LovExpert

回答

1

更常见的做法是查看所有行,提取相关部分,将其转换为实际日期,并将其与常规不平等的开始日期和结束日期进行比较。

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); 
} 

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

+0

其中是日期变量来自?。(和行) - >在当前上下文中不存在。错误代码请修改。我真的没有想法。 – LovExpert

+0

Opps我忘记了匿名对象前面的'new'。 (对不起,没有在这个编辑器中做,只是在这个窗口中) –

+0

这一行出现错误“.Select(line => new {line,date = DateTime.Parse(line.Split(',')[1])}) “----->说:System.FormatException:'字符串未被识别为有效的DateTime。 – LovExpert