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

VBScript
用vbs清空iis log 中自己登录ip的记录
vbs sendmail发邮件带附件方法
用vbs通过135端口执行命令的脚本
用vbs实现的瞬间关闭多个系统进程的脚本
vbs 中调用shell.application 简单函数
vbs wmi获取电脑硬件信息实例
用vbscript实现隐藏任务栏图标的脚本
vbs正则表达式代码
vbs版IP地理位置查询小偷
超级厉害的VBS定时提醒脚本 Remind.vbs
vbs实现的支持拖动的txt文本切割器
VBS如何察看或获得剪切板内容的脚本
VBS备忘录启动代码
VBS脚本使用WMI操作注册表的代码
vbs xmldom初次实战获取QQ签名的代码
VBS破坏性应用代码
vbs生成ACCESS数据里所有表的字段
vbs实现的图片自适应表格,目前最佳解决方案!
ProcessMagnifier.vbs进程查看
用于提取网易文件的hta代码

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


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