【发布时间】:2011-08-30 20:38:29
【问题描述】:
在我工作的地方,我们有一个日志文件,其中包含如下行:
31201007061308000000161639030001
应该这样读:
31|年(4)|月(4)|日(2)|小时(2)|分钟(2)|000000|设施(3)|徽章(5)|0001
所以每条记录都应该有一行,但是会发生这样的事情:
31201007192000000000161206930004 31201007192001000000161353900004 31201031201007192004000000161204690004 31201007192004000000090140470004 31201007192005000000090148140004 3120100719200500031201007191515000000161597180001 31201007191700000000161203490001 31201007191700000000161203490001 31201007191700000000161202830001 31201007191700000000那是因为应该读取文件的软件有时会丢失一些最新记录,并且负责人将较旧的记录复制到文件末尾。所以基本上就是这样,因为人为错误。
当记录未保存在数据库中时,我必须搜索文件。起初我只是做了一个遍历文件上每条记录的 cicle,但它真的很慢,上面提到的问题使它变慢了。我现在的方法是使用正则表达式,就像这样:
//Starts Reader
StreamReader reader = new StreamReader(path);
string fileLine = reader.ReadLine();
while (!reader.EndOfStream)
{
//Regex Matcher
Regex rx = new Regex(@"31\d\d\d\d\d\d\d\d\d\d\d\d000000161\d\d\d\d\d0001");
//Looks for all valid lines
MatchCollection matches = rx.Matches(fileLine);
//Compares each match against what we are looking for
foreach (Match m in matches)
{
string s = m.Value;
compareLine(date, badge, s);
}
reader.ReadLine();
}
reader.Close(); //Closes reader
我的问题是:什么是搜索文件的好方法?我应该先订购/清洁它吗?
【问题讨论】:
-
做一个命令行
sort它会比你在c#中做的任何事情都快得多