【发布时间】:2017-07-19 11:45:14
【问题描述】:
我正在尝试解析包含如下信息的日志文件:
2015-03-08 10:30:01 /user849/connect
2015-03-08 10:30:01 /user262/open-level2-price
2015-03-08 10:30:01 /user839/open-detailed-quotes
2015-03-08 10:30:02 /user145/add-technical-drawing
2015-03-08 10:30:02 /user108/connect
2015-03-08 10:30:03 /user850/filter-changed
2015-03-08 10:30:03 /user818/open-level2-price
2015-03-08 10:30:03 /user841/column-width
2015-03-08 10:30:03 /user850/filter-changed
2015-03-08 10:30:04 /user850/connect
2015-03-08 10:30:04 /user420/duration
2015-03-08 10:30:04 /user851/filter-changed
2015-03-08 10:30:04 /user217/duration
2015-03-08 10:30:05 /user82/update-column-properties
2015-03-08 10:30:05 /user809/open-level2-price
2015-03-08 10:30:05 /user382/add-technical-drawing
2015-03-08 10:30:06 /user851/connect
2015-03-08 10:30:07 /user350/add-technical-drawing
2015-03-08 10:30:09 /user849/filter-changed
2015-03-08 10:30:09 /user842/sort
2015-03-08 10:30:09 /user849/open-market-watch
2015-03-08 10:30:10 /user429/interval
2015-03-08 10:30:10 /user218/change-columns
2015-03-08 10:30:11 /user749/connect
2015-03-08 10:30:13 /user759/open-detailed-quotes
2015-03-08 10:30:14 /user753/connect
2015-03-08 10:30:14 /user377/connect
我正在尝试查找 3 个最常用的操作及其百分比,我想到的是读取文件,用一些正则表达式解析行,或者将它们填充到数据表中,然后处理该数据表,但我做不到。
你能告诉我该怎么做,从哪里开始,或者一些代码示例(最好是 c#)吗?
提前致谢!
编辑:
嗯,(我现在已经成功完成了)至于我尝试过的,这是我的代码
string filePath = @"6458.log";
try
{
DataTable logLines = new DataTable("LogLines");
//logLines.Columns.Add(new DataColumn("DateTime", System.Type.GetType("System.DateTime")));
logLines.Columns.Add(new DataColumn("User", typeof(string)));
logLines.Columns.Add(new DataColumn("Operation", typeof(string)));
string[] lines = System.IO.File.ReadAllLines(filePath);
foreach (string line in lines)
{
var cols = line.Split(new char[] { ' ', '/' }, StringSplitOptions.RemoveEmptyEntries);
DataRow dr = logLines.NewRow();
//dr["DateTime"] = cols[0] + " " + cols[1];
dr["User"] = cols[2];
dr["Operation"] = cols[3];
logLines.Rows.Add(dr);
}
var query = from row in logLines.AsEnumerable()
group row by row.Field<string>("Operation") into operations
orderby operations.Count() descending
select new
{
Name = operations.Key,
CountOfClients = operations.Count()
};
}
catch (Exception ex)
{
throw(ex) ;
}
请用代码支持您的提示以获得进一步的解释!
再次感谢
【问题讨论】:
-
but i was not able to do it.- 到目前为止你尝试过什么?我们可以看到代码吗? -
我建议不要使用
DataTable,因为例如使用Dictionary<string, int>并将日志文本存储为键并将发生值存储为值会更容易。 -
就像 vasek 所问的那样……你试过什么?您在读取文件、解析每一行、分析数据方面需要帮助吗?
-
@MightyBadaboom,如果两次使用相同的日志文本会怎样?
-
@ChristophK 增加
int的值;)
标签: c# regex fileparsing