2014-10-19 42 views
0

我正在嘗試編寫一個程序,該程序需要一個文本文件(日誌文件),並抓住它的最後10行以匹配特定的日誌條目,如果不匹配則拋出錯誤。問題是這些日誌條目是根據特定任務運行的時間標記日期時間的。C#日期時間通配符

我想匹配項的一個例子是

Started MM/DD/YY HH:MM:SS 
Download1 - success 
Download2 - success 
Download3 - success 
Download4 - success 
Download5 - success 
Download6 - success 
Download7 - success 
Download8 - success 
Ended MM/DD/YY HH:MM:SS 

由於這應該是在日誌文件中的最新條目,當我們運行這個程序,我用下面的代碼相匹配的樣本成功日誌什麼是在指定的日誌文件(略加編輯,以便簡化):

if (logfile.EndsWith("Started MM/DD/YY HH:MM:SS 
         Download1 - success 
         Download2 - success 
         Download3 - success 
         Download4 - success 
         Download5 - success 
         Download6 - success 
         Download7 - success 
         Download8 - success 
         Ended MM/DD/YY HH:MM:SS") 
    { 
      Console.WriteLine("Program Was Successful"); 
    } 
else 
    { 
      Console.WriteLine("Error"); 
    } 

我的問題是,因爲這個任務是在多臺計算機上運行的日期時間戳永遠不會匹配到了我的樣品成功日誌全國各地,不同的時區等

我想知道是否以及如何編輯樣本成功日誌,當我們匹配匹配的代碼時將忽略日期/時間戳。有沒有辦法寫出日期/時間通配符?任何幫助總是感激。謝謝!

+0

由於您不需要知道日期(只是在那裏),您可以簡單地使用正則表達式。 – Mephy 2014-10-19 14:05:40

+0

嗯。我以前從來沒有玩過正則表達式,但總是有第一個。我會研究這個。謝謝! – user3067132 2014-10-19 14:21:47

回答

0

也許這是足以與比較:

1 - 第一行必須開始以「已啓動」

2 - 的最後一行必須以「結束」

3開始 - 所有第一和最後行之間的行必須以「成功」

{ 
     var text = @"Started MM/DD/YY HH:MM:SS 
Download1 - success 
Download2 - success 
Download3 - success 
Download4 - success 
Download5 - success 
Download6 - success 
Download7 - success 
Download8 - success 
Ended MM/DD/YY HH:MM:SS"; 

     var result = IsValid(text, 8); // you can set the number of "Download.." strings 
    } 

結束......

private static bool IsValid(string text, int countOfDownloads) 
    { 
     string[] lines = text.Split(new[] {Environment.NewLine}, StringSplitOptions.None); 
     return IsValid(lines, countOfDownloads); 
    } 

    private static bool IsValid(string[] lines, int countOfDownloads) 
    { 
     if (lines.Length != countOfDownloads + 2) 
      return false; 

     if (!lines[0].StartsWith("Started")) 
      return false; 

     if (!lines[lines.Length - 1].StartsWith("Ended")) 
      return false; 

     for (var i = 1; i <= countOfDownloads; i++) 
     { 
      if (!lines[i].Trim().EndsWith("success")) 
       return false; 
     } 

     return true; 
    }