ログ情報を保存し、その特定の部分のみを返す、書式設定されたテキスト ファイルを取得するツールを作成しようとしています。たとえば、ログ ファイルは次のようになります。
[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
ファイルからこのテキストを取得したいと思います。山括弧内の各ログ メッセージ タイプのチェックボックスに基づいて、ユーザーは見たくないものを非表示にできます。「ステップ」チェックボックスをオフにすると、ステップ行が非表示になりますが、再度チェックすると、テキスト ウィンドウに再び表示されます。
各行を順番に保持するためにリストに格納される文字列に各行を格納しようとしましたが、この方法ではテキストの変更が非常に遅くなります。その方法を以下に示します
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 は、ロード時に設定され、ログ タイプに対応するチェックボックスのチェック イベントで変更される許可を含む文字列のリストです。上記の最初の方法は、表示内容を更新するためにロード時と各チェック イベントで使用されます。