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 之前超時很長時間。(但我們仍認為與名人共同編寫腳本要比觀看與名人共舞或滑冰更有意思。)