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 之前超时很长时间。(但我们仍认为与名人共同编写脚本要比观看与名人共舞或滑冰更有意思。)