我試圖解析一個相當長的日誌文件,並創建的問題更好更易於管理的列表。使用C#字典來分析日誌文件
我能夠讀取並解析出由行個人日誌行,但我需要做的是隻顯示獨特的條目,出現頻率高於其他一些錯誤,總是用相同的文字記錄。
我要去嘗試做的是創建一個Dictionary對象來保存每個唯一的入口,當我通過日誌文件時,搜索Dictionary對象,看是否相同的值已經在那裏。
這裏是我的代碼有粗樣品(進展中的工作,我希望我所有的語法右)不起作用。出於某種原因,這個腳本不會看到任何明顯的條目(如果語句根本不會通過):
string[] rowdta = new string[4];
Dictionary<string[], int> dict = new Dictionary<string[], int>();
int ctr = -1;
if (linectr == 1)
{
ctr++;
dict.Add(rowdta, ctr);
}
else
{
foreach (KeyValuePair<string[], int> pair in dict)
{
if ((pair.Key[1] != rowdta[1]) || (pair.Key[2] != rowdta[2])| (pair.Key[3] != rowdta[3]))
{
ctr++;
dict.Add(rowdta, ctr);
}
}
}
一些樣本數據: 第一行
rowdta[0]="ErrorType";
rowdta[1]="Undefined offset: 0";
rowdta[2]="/url/routesDisplay2.svc.php";
rowdta[3]="Line Number 5";
二號線
rowdta[0]="ErrorType";
rowdta[1]="Undefined offset: 0";
rowdta[2]="/url/routesDisplay2.svc.php";
rowdta[3]="Line Number 5";
3號線
rowdta[0]="ErrorType";
rowdta[1]="Undefined variable: fvmsg";
rowdta[2]="/url/processes.svc.php";
rowdta[3]="Line Number 787";
因此,在這個詞典中,第一行和第三行將包含2個條目。
我也與n還沒有找到在日誌文件文本的任何變化如下嘗試這樣做。
if (!dict.ContainsKey(rowdta)) {}
有人可以幫助我得到這個語法正確嗎?我只是C#的新手,但這應該是相對直接的。與往常一樣,我認爲這應該是足夠的信息來開始對話。如果你想要/需要更多的細節,請讓我知道。
你能後的代碼,你正在填充rowdta? – dcp 2012-03-27 17:04:55
嘗試使用hashset而不是字典(因爲它似乎不再需要這些值)。另外,嘗試使用.Equals()而不是==來比較字符串。 – 2012-03-27 17:08:30
謝謝大家對此的幫助。我會嘗試各種迭代,然後更新什麼可行。 – radi8 2012-03-27 18:22:52