快速业务通道

用vbs计算某个词在日志文件中的出现次数

作者 佚名 来源 ASP编程 浏览 发布时间 2013-07-09
问:
您好,脚本专家!如何计算Failure一词在日志文件中的出现次数?这里有个问题:由于日志文件一个接一个地写入事件,因而创建了一个非常之长的文本行。
--FS
答:
您好,FS。根据您电子邮件的其余部分来看,您的日志文件与下面的有些相似:
Failure2/7/20068:25AMFailure2/7/20069:45AMSuccess
2/7/20063:10PMFailure2/8/20069:15AMSuccess2/7/20063:01PM
正如您提到的,您首先想到的是使用InStr函数来查看是否Failure出现在日志文件中每行的某个地方;然后您可以通过活动计数器计算找到该词的次数,这与我们在昨天的专栏中演示的方法非常相似。这是个好主意,但是,正如您所发现的,在该方案中有一个重大的缺陷:从技术角度来说,您的日志文件仅包含一行。因此,尽管实际存在很多实例,但您的脚本总是报告只发现Failure的一个实例。您在邮件中写道:但是我被难住了,因为无法将单行拆为多行。
唉,您对我们一点信心都没有。试试这个看看是不是合适:
复制代码 代码如下:

ConstForReading=1
SetobjFSO=CreateObject("Scripting.FileSystemObject")
SetobjFile=objFSO.OpenTextFile("c:\scripts\test.log",ForReading)
strContents=objFile.ReadAll
objFile.Close
i=0
arrLines=Split(strContents,"")
ForEachstrLineinarrLines
IfInStr(strLine,"Failure")Then
i=i+1
EndIf
Next
Wscript.Echo"Numberoffailures:"&i
当然,我们还有其他一些方法也能够解决此问题。我们采用此方法,因为它完全吻合您最初的想法,而且我们认为它对于每个人来说都非常容易理解。我们提到这一点只是为了防止有人读到此处时想,“嘿,我可不会这么解决这个问题。”没问题:这不是唯一的答案。它只是答案的一种。
好了,那么脚本本身呢?嗯,我们首先定义了一个名为ForReading的常量;我们会在稍后打开日志文件时使用此常量。接下来我们创建Scripting.FileSystemObject的实例并使用OpenTextFile方法打开文件C:\Scripts\Test.log。文件打开后,我们使用ReadAll方法以将此文件的全部内容读取到变量strContents中,然后关闭Test.log文件。
您清楚了吗?接下来我们将值0赋于名为i的计数器变量;我们将使用i作为活动计数器来计算我们遇到Failure一词的每个实例。然后我们使用下面这行代码:
arrLines=Split(strContents,"")
还记得您说过的,您被难住,因为日志文件整个是非常之长的一行吗?嗯,我们在这里主要是将您的日志文件(或至少在变量strContents中存储的那个版本)分成一组较短的行。在您的日志文件中,单个词语以空格分开。在这行代码中,我们使用Split函数将strContents的值“拆分”为数组;通过对空格拆分(即,通过每次遇到空格便在数组中创建新项)我们得到一个数组,其开头如下:
Failure
2/7/2006
8:25
AM
Failure
2/7/2006
9:45
AM
Success
当然,它看起来很好笑,但是现在我们可以建立一个ForEach循环来遍历数组中的每项;更重要的是,我们还可以使用InStr方法查看是否可在这些行的任意行中找到Failure一词。如果可以,我们将增加计数器变量i的值。所有这些均由下面这段代码执行:
ForEachstrLineinarrLines
IfInStr(strLine,"Failure")Then
i=i+1
EndIf
Next
在我们遍历ForEach循环后,我们所要做的只是回显failure,然后就完成了。
现在,检查:我们所要做的只是回显在日志文件中找到的failure数量。您的脚本可能在完成回显所有failure之前超时很长时间。(但我们仍认为与名人共同编写脚本要比观看与名人共舞或滑冰更有意思。)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号