0

「WX GSA 検索」で「経過時間」の合計を計算したいのですが、ログ ファイルは次のとおりです。

WX 検索 = サーバー:nomos-scanner.corp.adobe.com ユーザー:vibsharm appGUID:wx 経過時間:875ms SaveSearchID:361 WX GSA 検索 = サーバー:nomos-scanner.corp.adobe.com ユーザー:gulanand appGUID:wx 経過時間:890ms SaveSearchID:361 WX GSA 検索 = サーバー:nomos-scanner.corp.adobe.com ユーザー:vibsharm appGUID: wx 経過時間:887ms SaveSearchID:361 WX GSA 検索 = サーバー:nomos-scanner.corp.adobe.com ユーザー: gulanand appGUID: wx Elapsed Time:875.5ms SaveSearchID:361 WX GSA Search = Server:nomos-scanner.corp.adobe.com User:vibsharm appGUID: wx Elapsed Time:877.6ms SaveSearchID:361

私が書いたコードが機能していません。大丈夫かどうか、正規表現を確認してください:

string searchKeyword = "WX GSA Search";
string fileName = @"C:\Users\karan\Desktop\Sample log file.txt";
string[] textLines = File.ReadAllLines(fileName);

List<string> results = new List<string>();

foreach (string line in textLines)
{
    if (line.Contains(searchKeyword))
    {
        results.Add(line);
    }
}

string x = string.Join(",",results);

List<string> users = new List<string>();
Regex regex = new Regex(@"Elapsed Time:\s*(?<timevalue>.*?)+ms");
MatchCollection matches = regex.Matches(x);

foreach (Match match in matches)
{
    var user = match.Groups["value"].Value;
    if (!users.Contains(time)) users.Add(time);
}

string[] s = users.ToArray();
4

3 に答える 3

0

唯一の問題が正規表現である場合は、これを試してください。

Regex re = new Regex(@"Elapsed Time:(?<timevalue>\d+(?:\.\d)?)ms");
于 2013-03-03T08:17:08.510 に答える
0

あなたの正規表現は完全に無効というわけではありませんが、改善される可能性があります。

例えば:

Regex regex = new Regex(@"Elapsed Time:\s*(?<value>\d+\.?\d*)\s*ms");

「ms」の前の「+」は、任意の数の文字を 1 回以上繰り返す必要があることを意味します。次に、最適な組み合わせを作成するために可能な組み合わせを試行しますが、これには時間がかかります。

*.? を変更しました。\d+.?\d* に変更すると、オプションで小数を含む数値のみが受け入れられます。

また、 (?< timevalue>... を (?< value>... に変更したため、コード サンプルと一致しました。

あなたの探求を頑張ってください。

于 2013-03-03T08:19:27.603 に答える
0

String.Splitと少しを使用しLinqて、経過時間を解析できます。

   TimeSpan elapsedTime = TimeSpan.FromMilliseconds(File.ReadAllLines("c:\\log.txt")
        .Where(line => line.Contains("Elapsed Time:"))
        .Select(line => line.Split(new string[] { "Elapsed Time:"}, StringSplitOptions.RemoveEmptyEntries).Last().Split(' ').First())
        .Select<string,double>(time => time.EndsWith("ms") ? double.Parse(time.Replace("ms","").Trim()) 
                                     : time.EndsWith("s") ? double.Parse(time.Replace("s","").Trim()) * 1000.0 : 0.0 ).Sum());
于 2013-03-03T09:43:30.043 に答える