問: 您好,腳本專家!我女兒有一種閃卡式程序,它能夠獲取文本文件中的單詞列表。我如何編寫一個(gè)腳本,使其能夠打開該文件并自動打亂單詞列表的順序呢? -- SN 答: 您好,SN。您知道,大多數(shù)情況下,我們盡力使此專欄關(guān)注實(shí)際的系統(tǒng)管理任務(wù):我們告訴您如何設(shè)置默認(rèn)打印機(jī)、如何禁用服務(wù)以及如何映射網(wǎng)絡(luò)驅(qū)動器。不過,有時(shí)我們也愿意處理那種聽起來就很有趣的問題,而最終的結(jié)果有多大用處我們是不會去考慮的。系統(tǒng)管理員通常需要打亂文本文件中單詞列表的順序嗎?可能不需要。但是,若是只工作,不玩耍,想必聰明的小孩也會變傻,對不對? 實(shí)際上,有些小孩就算玩了也還是有點(diǎn)傻。但這是另外一回事。 明確這一點(diǎn)后,讓我們看一下可以打亂文本文件中單詞順序的腳本。正如我們說過的那樣,這樣的工作在實(shí)際當(dāng)中可能沒有一點(diǎn)用處,但它是有點(diǎn)挑戰(zhàn)性,并且也確實(shí)需要我們使用一點(diǎn)令人感興趣的腳本編寫小竅門。還有,如果不是這樣,您可能永遠(yuǎn)也不會知道這樣的竅門何時(shí)才能派上用場。 首先,假定您有個(gè)類似于下面這樣的文本文件,文件中的所有單詞按字母順序排列: Apple Banana Carrot Dog Fish Elephant Giraffe Horse 如何才能打亂這些詞的順序呢?使用像下面這樣的腳本即可:
復(fù)制代碼 代碼如下:
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