2013-02-22 46 views
0

我試圖做一個工具以存儲我們的日誌記錄信息,並只返回的某些部分格式化的文本文件。例如日誌文件看起來是這樣的:動態過濾文字顯示根據用戶輸入

[TimeStamp] <Config>: Configuration note is shown here 
[TimeStamp] <Info>: Information is written here 
[TimeStamp] <Info>: More Information 
[TimeStamp] <Step>: A generated step is writing a message 
[TimeStamp] <Warning>: A warning is logged 
[TimeStamp] <Error>: An error has occurred 

我想借此從文件中這段文字,並根據複選框中尖括號每個日誌消息類型,用戶可以隱藏他們不什麼不在乎看到。如取消選中「步驟」複選框將隱藏Step行,但如果他們要重新檢查它,它將重新出現在文本窗口中。

我試圖存儲每一行​​到被存儲在一個列表,以保持每行以一個字符串,但這種方法非常的改變文本非常緩慢。該方法如下所示

logTextbox.Text = ""; 
foreach (string line in CompleteLog) //CompleteLog is list containing each line in log file 
{ 
    if (CheckLine(line)) //Checks line based on what the user wants to see 
    { 
     WriteLine(line); 
    } 
} 

任何建議將是非常歡迎

編輯:

 private bool CheckLine(string line) 
    { 
     int left = line.IndexOf('<'); 
     int right = line.IndexOf(">:"); 

     string logtype = line.Substring(left+1, right - left-1); 
     if (ValidLogs.Any(p => p.ToLower().Equals(logtype.ToLower()))) 
     { 
      return true; 
     } 

     return false; 
    } 

ValidLogs是包含的內容是允許的字符串列表是設置上的負載,並改變在對應於日誌類型的複選框的檢查事件上。上面的第一種方法用於加載和每個檢查事件來更新顯示內容。

+0

多少行,你在你的日誌文件有哪些?你正在使用哪種圖形框架? – ppetrov 2013-02-22 00:22:52

+0

另外,CheckLine如何實現?在我看來,這可能是問題的一部分。 – 2013-02-22 00:23:14

+0

正在使用什麼來顯示線條?我能想到的一些方法,以完善的配套,但這看起來更像 – 2013-02-22 00:44:20

回答

0

我認爲實現這一目標是使用ListView控件的最佳途徑。您可以在文本文件中每行添加一個項目,然後根據複選框篩選顯示的項目(行)。我可以推薦ObjectListView作爲實現這一點並使其看起來很漂亮的一種方式。

0

假設你沒有內存限制或過大的文件,你的過濾標準是固定的,你可以預先分析每一行的過濾條件並保存日誌對象上的過濾器的詳細信息,那麼你就必須使用簡單對象屬性檢查,而不必每次重新解析。

public class LogLine { 
     public string Text { get; set; } 
     public eLogLevel LogLevel { get; set; } 
     // other filter properties 
} 

然後,您將更改您的CheckLines()以篩選LogLine對象的列表。

logTextbox.Text = ""; 
foreach (LogLine line in ParsedLog) //ParsedLog is list containing each line in log file pre-parsed 
{ 
    if (CheckLine(line)) //Checks line based on what the user wants to see 
    { 
     WriteLine(line.Text); 
    } 
} 
相關問題