快速业务通道

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

作者 佚名 来源 ASP编程 浏览 发布时间 2013-07-09
问:
您好,脚本专家!我女儿有一种闪卡式程序,它能够获取文本文件中的单词列表。我如何编写一个脚本,使其能够打开该文件并自动打乱单词列表的顺序呢?
--SN
答:
您好,SN。您知道,大多数情况下,我们尽力使此专栏关注实际的系统管理任务:我们告诉您如何设置默认打印机、如何禁用服务以及如何映射网络驱动器。不过,有时我们也愿意处理那种听起来就很有趣的问题,而最终的结果有多大用处我们是不会去考虑的。系统管理员通常需要打乱文本文件中单词列表的顺序吗?可能不需要。但是,若是只工作,不玩耍,想必聪明的小孩也会变傻,对不对?
实际上,有些小孩就算玩了也还是有点傻。但这是另外一回事。
明确这一点后,让我们看一下可以打乱文本文件中单词顺序的脚本。正如我们说过的那样,这样的工作在实际当中可能没有一点用处,但它是有点挑战性,并且也确实需要我们使用一点令人感兴趣的脚本编写小窍门。还有,如果不是这样,您可能永远也不会知道这样的窍门何时才能派上用场。
首先,假定您有个类似于下面这样的文本文件,文件中的所有单词按字母顺序排列:
Apple
Banana
Carrot
Dog
Fish
Elephant
Giraffe
Horse
如何才能打乱这些词的顺序呢?使用像下面这样的脚本即可:
复制代码 代码如下:

ConstForReading=1
ConstForWriting=2
SetobjDictionary=CreateObject("Scripting.Dictionary")
SetobjFSO=CreateObject("Scripting.FileSystemObject")
SetobjFile=objFSO.OpenTextFile("c:\scripts\words.txt",ForReading)
i=-1
DoUntilobjFile.AtEndOfStream
strLine=objFile.Readline
objDictionary.AddstrLine,strLine
i=i+1
Loop
objFile.Close
DimarrWords()
RedimarrWords(i)
intWordsLeft=i
z=0
DoWhileintWordsLeft>=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
SetobjFile=objFSO.OpenTextFile("c:\scripts\words.txt",ForWriting)
ForEachstrIteminarrWords
objFile.WriteLinestrItem
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的数组意味着该数组中包含一个数据项。
嗨,我们只是如实汇报,至于原因我们可不晓得。
接下来是下面这段代码:
复制代码 代码如下:

DoUntilobjFile.AtEndOfStream
strLine=objFile.Readline
objDictionary.AddstrLine,strLine
i=i+1
Loop

我们在这里所做的就是逐行读取文件。对于文件中的每一行(即每个单词),我们将该值赋给一个名为strLine的变量;随后使用Add方法将该值添加到Dictionary对象之中,从而将i值加1。文件读取结束之后,所有的单词都存储在Dictionary对象之中

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号