当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbscript实现从后到前阅读一个文本文件

VBScript
用vbs检索在运行对话框中键入的一系列命令的代码
编写可以打开文本文件并打乱在该文件中所找到的单词顺序的vbs脚本
在 HTA 中暂停脚本的方法
运行脚本之前,如何确定计算机上的默认脚本宿主的代码
用vbs实现删除名称中有撇号的文件夹
用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法
用vbs实现配置无人登录计算机时使用的屏幕保护程序
用vbs更改 Internet Explorer 的标题栏
用vbs读取文本文件的最后一行
用vbs实现重新启动 Internet Explorer
用vbs实现禁用服务
用vbs确定计算机是否有 USB 2.0 端口的代码
用vbs列出注册表中 Run 项中的所有项目
用vbs将名称截断以使其最多包含 16 个字符的代码
用vbs将本地文件替换为在文件服务器上找到的新版本
用vbs确定脚本正在哪一个帐户下运行
用vbs确定可移动驱动器的连接时间
用vbs记录屏幕保护程序的开始时间和结束时间
用vbs计算某个词在日志文件中的出现次数
vbs病毒的简单例子源代码解析

VBScript 中的 用vbscript实现从后到前阅读一个文本文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 194 ::
收藏到网摘: n/a

问:
嗨,Scripting Guy!我有一个日志文件,新的数据总是被添加到文件的底部;也就是说最近的条目总是位于文件的末尾处。我想从最后一行开始读取内容,直到文件的第一行,但是我不知道怎样实现。
-- MB, Milwaukee, WI
答:
您好,MB.FileSystemObject 非常有用,但是它也具有它自己的一些限制;主要限制之一便是它只能从前向后读取文件内容。和 Tail 工具不同,您不能要求 FileSystemObject 从后向前读取文件。(好,我们假定您要求这么做,但是它肯定无法为您实现。)
但是,没有关系,正如使用脚本做其他事情一样,您总能找到一个办法冲破这种限制的束缚。在这种情况下,我们所做的就是继续向前,从前向后读取文件,从第一行还是,到最后一行结束。但是,和立即将这些行显示在屏幕上不同,我们将它们保存在一个数组里,文件中的每一行代表数组中的一个元素。
我们为什么要这样做?好,现在我们有了一个下面这样的数组,保存了文本文件中的信息:
violet
indigo
blue
green
yellow
orange
red
不可否认的是,我们现在所做的就像重新发明轮子一样。不过,文本文件和数组之间有一个重要的不同之处: 从后向前读取数组非常容易。我们将要脚本从数组中的最后一个项目开始(我们可以使用 Ubound 函数来确定)并且从后向前读取到数组的第一个项目(Lbound)。
在我们的示例数组中,有 7 个项目;最后一个项目(Ubound)是单词 red,第一个项目(Lbound)是单词 violet。数组中的第一个项目的下标为 0;所以 violet 的下标为 0,red 的下标为 6。我们的脚本将从项目 6 开始向前到项目 0 为止。那怎样实现呢?我们将参数 Step 设为 -1,也就表示,“找到项目 6 ,然后对它做点什么;然后将下标减 1,得到 5。在找到项目 5 ,再对它做点什么。重复这个过程,直到处理完了数组中的所有项目。”
具体的实现代码如下所示:
Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\FSO\ScriptLog.txt", 1)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
Wscript.Echo arrFileLines(l)
Next
如果您没有使用过数组,可能看起来有点糊涂,但是在熟悉了它之后,便会发现它实际上很简单。
好,我们从后向前读取文件的输出结果如下所示:
red orange yellow green blue indigo violet
有关数组使用的更多信息,请参阅Microsoft Windows 2000 脚本编写指南.