亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

編寫可以打開文本文件并打亂在該文件中所找到的單詞順序的vbs腳本

2020-06-26 18:07:02
字體:
來源:轉載
供稿:網友
問: 
您好,腳本專家!我女兒有一種閃卡式程序,它能夠獲取文本文件中的單詞列表。我如何編寫一個腳本,使其能夠打開該文件并自動打亂單詞列表的順序呢? 
-- 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 
哦,當然,這看起來有些不可思議;確實是件不可思議的差事(至少對系統管理員來講是這樣的)。但是,不管您相信與否,這其中是有邏輯的,我們也將逐步讓您明白這種邏輯。 
腳本的第一部分確實相當簡單。我們定義一對常量 - ForReading 和 ForWriting,我們將在處理文本文件時使用這兩個常量。然后創建兩個對象:Scripting.Dictionary 和 Scripting.FileSystemObject。我們將使用 Dictionary 對象作為從文本文件中所讀取單詞的臨時倉庫;而使用 FileSystemObject 與該文本文件進行實際的交互。 
接下來使用 OpenTextFile 方法打開文件 C:/Scripts/Words.txt 以進行讀取。(注意常量 ForReading 的使用。)下一步,創建一個計數器變量 i 并將其值設置為 -1;我們將使用此變量跟蹤文件中的單詞數。為什么 i 要從 -1 而不是 0 開始?因為我們要使用 i 建立一個數組,并且由于數組中的第一項始終為 0(而不是 1),因此我們需要從 -1 開始。在我們讀取第一個單詞時,i 將被設置為 0,盡管聽起來有些奇怪,但是大小為 0 的數組意味著該數組中包含一個數據項。 
嗨,我們只是如實匯報,至于原因我們可不曉得。 
接下來是下面這段代碼: 
復制代碼代碼如下:

Do Until objFile.AtEndOfStream  
    strLine = objFile.Readline  
    objDictionary.Add strLine, strLine     
    i = i + 1  
Loop

我們在這里所做的就是逐行讀取文件。對于文件中的每一行(即每個單詞),我們將該值賦給一個名為 strLine 的變量;隨后使用 Add 方法將該值添加到 Dictionary 對象之中,從而將 i 值加 1。文件讀取結束之后,所有的單詞都存儲在 Dictionary 對象之中,i 的值將為 7,這恰好是文件中的單詞數減 1。(為什么?因為其中含有 8 項數據的數組的大小為 7。) 
別擔心;到最后您應該會明白其原因所在。 
我們希望如此。 
關閉文件之后,初始化數組 arrWords,設置其大小為 i (表示文本文件中的單詞數減 1)。同時將 i 值賦給變量 intWordsLeft,通過它我們將知道有多少單詞要被打亂順序。最后,將變量 z 的值設為 0;我們將使用 z 將已打亂順序的單詞填充到數組中。實際上,我們要做的就是從 Dictionary 中隨機取出一個單詞然后將其添加到數組中。因為單詞是以隨機的順序從 Dictionary 中取出的,因此它們在數組中的順序將被“打亂”(以不同的順序存儲)。 
現在,到了很有趣的這部分。建立一個 Do 循環,其一直運行到我們用完 Dictionary 對象中的所有單詞。接著使用下面這兩行代碼從 0 和 Dictionary 對象中數據項的數目(或者至少是數據項的實際數減 1,因為 Dictionary 對象中的第一個數據項為第 0 項)之間隨機選擇一個數字: 
Ranndomize 
rndWord = Int((intWordsLeft - 0 + 1) * Rnd + 0) 
之后我們將 intWordsLeft 值減 1;這樣做是為了始終記住我們現在要處理的單詞比之前所處理的少了一個。 
那么我們需要這個隨機數字做什么呢?我們現在要做的就是使用該值從 Dictionary 中隨機抽取一個單詞。為此,我們可以創建一個 Dictionary 項的集合,然后在變量 strText 中存儲此隨機選擇的數據項數字的值: 
colItems = objDictionary.Items 
strText = colItems(rndWord) 
換句話說,Banana 當前為 Dictionary 中的第 1 項。假定在生成隨機數字的時候得到的是 1。這意味著我們將從 Dictionary 中將第 1 項的值取出;然后,也就意味著單詞 Banana 被存儲在變量 strText 中。  
明白了嗎?從 Dictionary 中隨機取出一個單詞之后,我們即需要將該值存儲到某個地方。為此我們使用數組 arrWords,使 strText 成為數組中的第一項: 
Words(z) = strText 
我們如何知道該值應成為第一項?因為我們將該值賦給第 z 項,而第 z 項等于 0。之后,我們立即將 z 加 1,z 將等于 1。這也意味著,通過循環下一次我們會將檢索到的值賦給數組中的第二項。 
單詞 Banana 使用過之后,下一步就是將該單詞從 Dictionary 中刪除;否則我們可能會再次使用該單詞。要刪除此單詞,只需調用 Dictionary 對象的 Remove 方法,將變量 strText 作為要刪除的項進行傳遞即可: 
objDictionary.Remove(strText) 
一切均順利完成之后,數組 arrWords 將包含一個從文本文件中所取出的已打亂順序的單詞的列表: 
Banana 
Elephant 
Giraffe 
Apple 
Fish 
Carrot 
Horse 
Dog 
很好,是吧?隨后我們只要打開文件 Words.txt(這次是進行寫入),然后使用已打亂順序的列表 arrWords 替換現有內容即可: 
復制代碼代碼如下:

Set objFile = objFSO.OpenTextFile("c:/scripts/words.txt", ForWriting)  
For Each strItem in arrWords  
    objFile.WriteLine strItem  
Next  
objFile.Close 
下次您的女兒(誰的女兒都一樣)運行教育程序的時候,她所看到的將是以隨機方式顯示的單詞。 
順便說一句,我們并沒有像人們所謠傳的那樣對此專欄的文本進行了該腳本的測試。在您好,腳本專家!專欄中的單詞可不是隨機選擇的;每個單詞都是我們花了無數的時間進行辛勤的探索和耕耘所得到的。 
事實上,就在我們做完所有認真細致的耕耘之后。我們的編輯又將所有單詞的順序隨機打亂。如果您能看到該專欄編輯之前的樣子,就一定會為它的美妙而吃驚不已!(編輯附注:您看到的會是這種編輯之前的情況:將您吃驚感到。使用不會但是單詞這個我“美妙”。) 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av电影在线播放| 日韩精品亚洲视频| 成人精品视频久久久久| 久久九九国产精品怡红院| 欧美成人免费大片| 亚洲人午夜色婷婷| 国产欧美在线视频| 亚洲国产精品成人一区二区| 亚洲人成免费电影| 色噜噜狠狠狠综合曰曰曰88av| 精品亚洲一区二区三区四区五区| 九九热精品视频在线播放| 青青草原成人在线视频| 久久99热精品| 欧洲成人性视频| 亚洲激情中文字幕| 国产成人精品免高潮在线观看| 2019精品视频| 久久久久99精品久久久久| 日本韩国欧美精品大片卡二| 91精品国产99久久久久久| 大荫蒂欧美视频另类xxxx| 色婷婷综合久久久久| 欧美日韩免费观看中文| 在线观看欧美成人| 国产欧美 在线欧美| 91中文精品字幕在线视频| 成人欧美一区二区三区在线湿哒哒| 亚洲香蕉av在线一区二区三区| 国产精品三级美女白浆呻吟| 96精品视频在线| 九九精品在线视频| 国产精品一区二区三区在线播放| 日韩中文字幕不卡视频| 中文字幕亚洲综合久久筱田步美| 亚洲国产精品成人va在线观看| 亚洲欧美日韩精品| 欧美电影在线观看完整版| 亚洲丝袜一区在线| 欧美精品免费看| 国产成人啪精品视频免费网| 亚洲欧美日韩一区二区在线| yellow中文字幕久久| 欧美成人精品在线| 一区二区中文字幕| 亚洲已满18点击进入在线看片| 国产一区二区视频在线观看| 欧美一级免费看| 欧美大荫蒂xxx| 伊人久久大香线蕉av一区二区| 菠萝蜜影院一区二区免费| 久久免费成人精品视频| 亚洲视频电影图片偷拍一区| 91av视频导航| 精品视频一区在线视频| 精品小视频在线| 亚洲色图激情小说| 美女999久久久精品视频| 日韩av免费网站| 91精品久久久久久久久中文字幕| 精品国产91久久久久久| 一区二区三区视频观看| 国产精品亚洲一区二区三区| 91国语精品自产拍在线观看性色| 日韩美女免费线视频| 97福利一区二区| 欧美黑人一级爽快片淫片高清| 久久99国产精品自在自在app| 91亚洲国产成人久久精品网站| 热门国产精品亚洲第一区在线| 亚洲国产成人精品女人久久久| 庆余年2免费日韩剧观看大牛| 欧美激情一二区| 亚洲国产成人精品女人久久久| 国产91网红主播在线观看| 日韩精品中文字幕在线| 精品国产一区二区三区在线观看| 国语自产精品视频在线看一大j8| 亚洲自拍偷拍第一页| 91久久久久久久久| 亚洲免费av片| 亚洲a级在线观看| 午夜精品视频在线| 国产精品久久久久久久久粉嫩av| 色妞一区二区三区| 亚洲丁香婷深爱综合| 久久久精品在线| 欧洲亚洲在线视频| 精品女同一区二区三区在线播放| 国产精品久久久久免费a∨大胸| 亚洲深夜福利视频| 日韩精品视频三区| 亚洲护士老师的毛茸茸最新章节| 欧美亚洲视频在线看网址| 亚洲大胆人体在线| 96pao国产成视频永久免费| 欧美午夜www高清视频| 国产精品第10页| 色偷偷91综合久久噜噜| 亚洲精品在线不卡| 高潮白浆女日韩av免费看| 欧美巨大黑人极品精男| 欧美精品成人在线| 久久精品夜夜夜夜夜久久| 精品视频久久久久久久| 国产91在线播放精品91| 色综合视频一区中文字幕| 国产精品一区二区三区久久| 8090理伦午夜在线电影| 欧美日韩国产综合视频在线观看中文| 亚洲欧美中文字幕在线一区| 国产精品一区av| 亚洲va欧美va国产综合剧情| 国内精品视频在线| 国产成人精品日本亚洲| 91中文字幕在线| 成人精品视频99在线观看免费| 亚洲а∨天堂久久精品9966| 亚洲a级在线播放观看| 亚洲午夜未满十八勿入免费观看全集| 久久久久久久久久久免费| 亚洲欧洲日产国产网站| 日韩中文字幕亚洲| 亚洲欧美国产精品久久久久久久| 精品欧美国产一区二区三区| 欧洲亚洲免费在线| 九九热r在线视频精品| 精品欧美一区二区三区| 久久久精品网站| 亚洲一区二区三区在线视频| 久久成人精品一区二区三区| 国产精品视频自拍| 日韩高清av在线| 国产精品mp4| 国产精品丝袜高跟| 亚洲欧美激情四射在线日| 日韩女优在线播放| 97在线视频免费观看| 北条麻妃一区二区在线观看| 欧美激情视频一区二区三区不卡| 成人久久18免费网站图片| 日韩视频精品在线| 国产成人久久久精品一区| 欧美噜噜久久久xxx| 精品亚洲一区二区三区在线观看| 亚洲日本中文字幕免费在线不卡| 欧洲亚洲妇女av| 亚洲性无码av在线| 亚洲a∨日韩av高清在线观看| 亚洲精品国产精品自产a区红杏吧| 亚洲激情成人网| 久久久久久久爱| 91久久精品美女高潮| 欧美激情xxxxx| 亚洲欧美精品一区| 欧美一级高清免费播放| 国产精品1区2区在线观看| 国产精品久久久久秋霞鲁丝| 成人日韩在线电影| 欧美国产亚洲视频| 成人欧美在线观看| 在线国产精品播放| 亚洲天堂网站在线观看视频| 日日骚久久av|