2017-06-20 75 views
-2

我是c#中的新成员,也使用csv文件。我需要使用一系列日期来过滤csv文件。在csv文件中包含csv文件中的一个范围之间的日期的过滤器行#

csv文件的内容与下面的数据类似。

“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“,”01/27/2015“,”07:55“,”0“
”2582“,”01/27/2015“,”07:55“, “0”

这应该是输出:

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

壳牌可以做这,它的不公平,C#不能。因为在向网络搜索这类问题之后,找不到解决方案。

试一试这段代码。

DateTime dFm = new DateTime(2015, 01, 25); 
DateTime dTo = new DateTime(2015, 01, 27); 

var lines = System.IO.File.ReadAllLines(txtFileName.Text); 
var data = lines 
      .Skip(1) 
      .Select(x => new 
      { 
       EmpCode = Int32.Parse(x.Split(new string[] { @""",""", @"""" 
      }, StringSplitOptions.RemoveEmptyEntries)[0]), 
       Date = DateTime.ParseExact(
       string.Concat(x.Split(new string[] { @""",""", @"""" }, 
       StringSplitOptions.RemoveEmptyEntries)[1], " ", 
       x.Split(new string[] { @""",""", @"""" }, 
       StringSplitOptions.RemoveEmptyEntries)[2]), 
       "MM/dd/yyyy HH:mm", 
       System.Globalization.CultureInfo.InvariantCulture), 
       Type = x.Split(new string[] { @""",""", @"""" }, 
       StringSplitOptions.RemoveEmptyEntries)[3] 
      }) 
      .Where(x => x.Date >= dFm && x.Date <= dTo) 
      .ToList(); 
      } 
+0

你是怎么认为C#不能的?你试着写什么代码? –

+0

C#可以,你不能:) –

+0

嘿嘿,是像我这样的初学者。 – LovExpert

回答

1

它相当容易CsvHelper实现自己的目标:

var dFm = new DateTime(2015, 01, 25); 
var dTo = new DateTime(2015, 01, 27); 
using (var reader = File.OpenText(@"sample.csv")) 
{ 
    var csv = new CsvReader(reader); 
    while (csv.Read()) 
    { 
     var date = csv.GetField<DateTime>("Date"); 
     if (date >= dFm && 
      date <= dTo) 
     { 
      // process the filtered out records 
     } 
    } 
} 

在我存储在sample.csv文件数据的例子。另外,在我的机器上,我使用欧洲日期约定(日/月/年)并且必须调整数据。如果设置为美国年会(月/日/年),我认为您的机器可以正常工作。

process the filtered out records中,您添加了逻辑以将记录写入您的首选输出(我没有实现它,因为它不想破坏所有乐趣)。

正如在开始时提到的,我使用了CsvHelper。我不会冒险自己实施CSV解析器 - 这是一项复杂且耗时的任务,并且已经有一个优秀的库。

+0

我的答案的第一行是链接。它会带你到项目的网站,在那里你可以找到图书馆的所有细节。 – PiotrWolkowski

+0

你能为我提供if语句吗?只是为了让我成为我的榜样。 – LovExpert

+0

你的意思是if语句:'if(date> = dFm && date <= dTo)'? – PiotrWolkowski

相关问题