首页 > 编程 > VBScript > 正文

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

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

Const ForReading = 1 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("c:/scripts/test.log", ForReading) 
strContents = objFile.ReadAll 
objFile.Close 
i = 0 
arrLines = Split(strContents, " ") 
For Each strLine in arrLines 
    If InStr(strLine, "Failure") Then 
        i = i + 1 
    End If 
Next 
Wscript.Echo "Number of failures: " & i 
当然,我们还有其他一些方法也能够解决此问题。我们采用此方法,因为它完全吻合您最初的想法,而且我们认为它对于每个人来说都非常容易理解。我们提到这一点只是为了防止有人读到此处时想,“嘿,我可不会这么解决这个问题。”没问题:这不是唯一的答案。它只是答案的一种。
好了,那么脚本本身呢?嗯,我们首先定义了一个名为 ForReading 的常量;我们会在稍后打开日志文件时使用此常量。接下来我们创建 Scripting.FileSystemObject 的实例并使用 OpenTextFile 方法打开文件 C:/Scripts/Test.log。文件打开后,我们使用 ReadAll 方法以将此文件的全部内容读取到变量 strContents 中,然后关闭 Test.log 文件。
您清楚了吗?接下来我们将值 0 赋于名为 i 的计数器变量;我们将使用 i 作为活动计数器来计算我们遇到 Failure 一词的每个实例。然后我们使用下面这行代码:
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选