「GSA検索」で「経過時間」の合計を計算したいのですが、食い違いがあります。形式が「経過時間:97ms」の場合もあれば、「経過時間:97ms」の場合もあります。どうすれば両方のシナリオをカバーできますか?
以下は私のログファイル形式です:
WX検索=サーバー:nomos-scanner.corp.comユーザー:vibsharmappGUID:wx経過時間:975ms SaveSearchID:361 WX検索=サーバー:nomos-scanner.corp.comユーザー:vibsharmappGUID:wx経過時間:875ms SaveSearchID:361 GSA検索=サーバー:nomos-scanner.corp.comユーザー:gulanandappGUID:wx経過時間:890msSaveSearchID:361 GSA検索=サーバー:nomos-scanner.corp.comユーザー:vibsharmappGUID:wx経過時間:887msSaveSearchID:361 GSA検索=サーバー:nomos-scanner.corp.comユーザー:gulanand appGUID:wx経過時間:875.5ms SaveSearchID:361 GSA検索=サーバー:nomos-scanner.corp.comユーザー:vibsharmappGUID:wx経過時間:877.6msSaveSearchID:361
私のコード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Linq.Expressions;
namespace ConsoleApplication5
{
class Program
{
public static void Main(string[] args)
{
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);
}
}
var elapsedTime = results.SelectMany(line => line.ToLower().Split(' '))
.Where(line => line.StartsWith("time"))
.Select(timeLine => decimal.Parse(timeLine.Split(':')[1].Replace("ms", String.Empty)))
.Average(time => time);
Console.WriteLine(elapsedTime);
// keep screen from going away
// when run from VS.NET
Console.ReadLine();
}
}
}