2017-06-20 58 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

相關問題