Share via


嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:我要如何計算文字檔中的行數?


我要如何計算文字檔中的行數?

嗨,Scripting Guy!我要如何計算文字檔中的行數?

-- MS

MS,您好。顯然,Microsoft 的指令碼技術不是由專職從事系統管理工作的人員撰寫產生的。我們的指令碼技術塞滿了許多特性和功能,不過似乎遺漏了人們「真正」想要做到的項目。計算文字檔中的行數就是很好的例子。這似乎是系統管理員必須定期進行的工作;畢竟,本月我們已經第 4 次或第 5 次收到這樣的問題。可是,並沒有直接的方法能夠計算出文字檔中的行數。是否有像 CountLines 之類的方法?沒有。那麼有 NumberOfLines 之類的屬性嗎?也沒有。天曉得為什麼。

幸運的是,雖然我們的指令碼技術經常不太直接了當,不過通常還是「有」提供因應措施的彈性。這裡也不例外。儘管沒有明顯的方法可計算文字檔中的行數,您依然可以使用指令碼來取得這項資訊。例如,以下指令碼會傳回在 C:\Scripts\Test.txt 檔案中找到的行數:

Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
    ("C:\Scripts\Test.txt", ForReading)
objTextFile.ReadAll
Wscript.Echo "Number of lines: " & objTextFile.Line

那麼,其中的秘密何在?好的,我們開始先使用 FileSystemObject 開啟檔案以進行讀取。接著我們使用 ReadAll 方法,直接讀取整個文字檔。在使用 ReadAll 時,我們讀取文字檔中的每一行。由於 FileSystem 物件只能從檔案的開頭讀取到檔案的結尾,也就表示當 ReadAll 完成時,我們必須位於檔案的最後一行,而不可能是在其他任何位置。所以,我們只需要傳回 Line 屬性的數值,該值就會報告目前文字行是第幾行。因為我們已經位於最後一行,在此情況下的 Line 屬性也等於告訴我們檔案中的行數。很簡單吧。

當然,您可能會想:「是嗎?為了計算行數,就要開啟和讀取整個檔案?這樣究竟要花多久時間?」令人驚訝的是,需要的時間並不長。我們對含有超過 20,000 行的文字檔測試過這個指令碼。在一般舊式膝上型電腦 (2.39 GhZ、512 MB RAM),這個指令碼只需要 1 秒即可完成。您的結果可能會有所不同,不過應該不至於有太大的差別。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首