用vbs计算某个词在日志文件中的出现次数
问:
您好,脚本专家!如何计算 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 一词的每个实例。然后我们使用下面这行代码:
arrLines = Split(strContents, " ")
还记得您说过的,您被难住,因为日志文件整个是非常之长的一行吗?嗯,我们在这里主要是将您的日志文件(或至少在变量 strContents 中存储的那个版本)分成一组较短的行。在您的日志文件中,单个词语以空格分开。在这行代码中,我们使用 Split 函数将 strContents 的值“拆分”为数组;通过对空格拆分(即,通过每次遇到空格便在数组中创建新项)我们得到一个数组,其开头如下:
Failure
2/7/2006
8:25
AM
Failure
2/7/2006
9:45
AM
Success
当然,它看起来很好笑,但是现在我们可以建立一个 For Each 循环来遍历数组中的每项;更重要的是,我们还可以使用 InStr 方法查看是否可在这些行的任意行中找到 Failure 一词。如果可以,我们将增加计数器变量 i 的值。所有这些均由下面这段代码执行:
For Each strLine in arrLines
If InStr(strLine, "Failure") Then
i = i + 1
End If
Next
在我们遍历 For Each 循环后,我们所要做的只是回显 failure,然后就完成了。
现在,检查:我们所要做的只是回显在日志文件中找到的 failure 数量。您的脚本可能在完成回显所有 failure 之前超时很长时间。(但我们仍认为与名人共同编写脚本要比观看与名人共舞或滑冰更有意思。)
您可能感兴趣的文章
- 01-10下载文件到本地运行的vbs
- 01-10VBS中的正则表达式的用法大全 <font color=red>原创&
- 01-10VBS中SendKeys的基本应用
- 01-10VBScript教程 第十一课深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript语法速查及实例说明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七课使用条件语句
- 01-10vbscript 可以按引用传递参数吗?
- 01-10VBScript教程 第二课在HTML页面中添加VBscript代码


阅读排行
本栏相关
- 01-10下载文件到本地运行的vbs
- 01-10飘叶千夫指源代码,又称qq刷屏器
- 01-10SendKeys参考文档
- 01-10什么是一个高效的软件
- 01-10VBS中的正则表达式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本应用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一课深入VBScript
- 01-10VBScript语法速查及实例说明
随机阅读
- 01-10SublimeText编译C开发环境设置
- 04-02jquery与jsp,用jquery
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10C#中split用法实例总结
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11ajax实现页面的局部加载
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10delphi制作wav文件的方法