問: 您好,腳本專家!我女兒有一種閃卡式程序,它能夠獲取文本文件中的單詞列表。我如何編寫一個腳本,使其能夠打開該文件并自動打亂單詞列表的順序呢? -- SN 答: 您好,SN。您知道,大多數情況下,我們盡力使此專欄關注實際的系統管理任務:我們告訴您如何設置默認打印機、如何禁用服務以及如何映射網絡驅動器。不過,有時我們也愿意處理那種聽起來就很有趣的問題,而最終的結果有多大用處我們是不會去考慮的。系統管理員通常需要打亂文本文件中單詞列表的順序嗎?可能不需要。但是,若是只工作,不玩耍,想必聰明的小孩也會變傻,對不對? 實際上,有些小孩就算玩了也還是有點傻。但這是另外一回事。 明確這一點后,讓我們看一下可以打亂文本文件中單詞順序的腳本。正如我們說過的那樣,這樣的工作在實際當中可能沒有一點用處,但它是有點挑戰性,并且也確實需要我們使用一點令人感興趣的腳本編寫小竅門。還有,如果不是這樣,您可能永遠也不會知道這樣的竅門何時才能派上用場。 首先,假定您有個類似于下面這樣的文本文件,文件中的所有單詞按字母順序排列: Apple Banana Carrot Dog Fish Elephant Giraffe Horse 如何才能打亂這些詞的順序呢?使用像下面這樣的腳本即可:
復制代碼 代碼如下:
Const ForReading = 1 Const ForWriting = 2 Set objDictionary = CreateObject("Scripting.Dictionary") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:/scripts/words.txt", ForReading) i = -1 Do Until objFile.AtEndOfStream strLine = objFile.Readline objDictionary.Add strLine, strLine i = i + 1 Loop objFile.Close Dim arrWords() Redim arrWords(i) intWordsLeft = i z = 0 Do While intWordsLeft >= 0 Randomize rndWord = Int((intWordsLeft - 0 + 1) * Rnd + 0) intWordsLeft = intWordsLeft - 1 colItems = objDictionary.Items strText = colItems(rndWord) arrWords(z) = strText z = z + 1 objDictionary.Remove(strText) Loop Set objFile = objFSO.OpenTextFile("c:/scripts/words.txt", ForWriting) For Each strItem in arrWords objFile.WriteLine strItem Next objFile.Close