首页 > 编程 > VBScript > 正文

编写可以打开文本文件并打乱在该文件中所找到的单词顺序的

2019-10-26 17:59:03
字体:
来源:转载
供稿:网友
问:
您好,脚本专家!我女儿有一种闪卡式程序,它能够获取文本文件中的单词列表。我如何编写一个脚本,使其能够打开该文件并自动打乱单词列表的顺序呢?
-- 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 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表