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

VBScript
vbs在网页中显示服务
vbs得没公开对象
unpack.vbs
使用批处理文件异地备份数据库(最近几天的数据)
VBScript 中的字节数据操作函数
切换dos并dir的vbs
杀毒的对vbs相当敏感 免杀
多进程的vbs脚本
Windows管理脚本学习
15分钟提醒一次,珍惜时间啊
从一个VBS脚本学习一点点东西
exe2swf 工具(Adodb.Stream版)
使用脚本自动修改ip设置
深入挖掘Windows脚本技术
用VBSCRIPT控制ONSUBMIT事件
VBS中Select CASE的其它用法
vbscript 可以按引用传递参数吗?
下载文件到本地运行的vbs
飘叶千夫指源代码,又称qq刷屏器
SendKeys参考文档

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 175 ::
收藏到网摘: 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 脚本编写指南.