用vbs對文本文件的內容進行排序
2019-10-26 17:59:42
供稿:網友
問:
您好,腳本專家!我有一個包含計算機名稱列表的文本文件。如何按照字母順序對該文件進行排序?
-- LR
答:
您好,LR。如果想偷懶的話,我們就會告訴您:“對不起,您不能這樣做?!蔽覀円部梢跃痛嗣撋?,因為 Microsoft 的腳本編寫技術中沒有一個方法能在打開文本文件后對文件進行排序。不過,嗨,“腳本專家”什么時候偷過懶呢?
噢,對了,我們是偷過幾次懶,不過希望所有的人都已經忘了。不過,這次我們將向您提供一個解決辦法。
雖然沒有能直接對文本文件進行排序的方法,但我們可以通過執行以下操作最終達到相同的效果:1) 使用 FileSystemObject 將文件讀取到內存中;2) 在內存中按照字母順序對文件進行排序;3) 使用內存中的已排序的數據替換文件現有的內容。這些操作雖然有點兒繞彎兒,但是您最后將得到一個已按照字母順序進行排序的文本文件,而這正是您想要的結果。
為了完成此任務,我們選擇使用一個斷開連接的記錄集。還有其他的方法能夠實現此目的(比如說,冒泡排序),但是斷開連接的記錄集能提供更多的靈活性,且更易于講解,尤其適合于那些曾有過數據庫編程經驗的用戶。我們在此將向您簡要介紹斷開連接的記錄集;若要獲得有關其工作原理的詳細說明,您可能需要訪問 Scripting Week 2 網絡廣播 Things the Scripting Guys Never Told You(腳本專家從未告訴過您的事情)。(作為額外提供的補充信息,該網絡廣播還將向您說明如何使用冒泡排序對單個文件數據進行排序。)
在開始之前,我們假定您有一個與以下內容類似的文本文件,文件的每一行都有一個計算機名稱:
red-ws-02
atl-ws-01
sf-ws-02
atl-ws-02
atl-ws-03
red-ws-02
sf-ws-01
如何讀取這些計算機名稱、對它們進行排序并接著將排序后的列表寫回該文本文件呢?我們可以使用一個與以下內容類似的腳本:
Const adVarChar = 200
Const MaxCharacters = 255
Const ForReading = 1
Const ForWriting = 2
Set DataList = CreateObject("ADOR.Recordset")
DataList.Fields.Append "ComputerName", adVarChar, MaxCharacters
DataList.Open
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:/Scripts/Computers.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
DataList.AddNew
DataList("ComputerName") = strLine
DataList.Update