Vbscript 从文本文件中读取最后第五行
我必须通过vb脚本读取日志文件的最后第五行。 有人能指导我怎么做吗 我使用下面的代码,只读取最后一行和回声最后一行和行计数,需要加强它Vbscript 从文本文件中读取最后第五行,vbscript,Vbscript,我必须通过vb脚本读取日志文件的最后第五行。 有人能指导我怎么做吗 我使用下面的代码,只读取最后一行和回声最后一行和行计数,需要加强它 Dim fh, fso, sLastLine, lineCount Set fso = CreateObject("Scripting.FileSystemObject") Set fh = fso.OpenTextFile( "E:\Coding\VB\demo.txt" ) sLastLine = "" lineCount = 0 Do Until fh.
Dim fh, fso, sLastLine, lineCount
Set fso = CreateObject("Scripting.FileSystemObject")
Set fh = fso.OpenTextFile( "E:\Coding\VB\demo.txt" )
sLastLine = ""
lineCount = 0
Do Until fh.AtEndOfStream
lineCount = lineCount + 1
sLastLine = fh.ReadLine()
Loop
fh.Close
WScript.Echo sLastLine
WScript.Echo lineCount
demo.txt的内容如下:
zcZcxZCsdfdfsfd
aaaaa
bbbb
cccc
dddd
eeee
最后有4个空行,我必须在这里阅读“eeee”。听起来你可以修剪末端,得到最后一行(未测试): 怎么样
Set fso = CreateObject("Scripting.FileSystemObject")
Set fh = fso.OpenTextFile("D:\demo.txt")
strin = Split(fh.readall, vbNewLine)
wscript.echo strin(fh.Line - 5)
一个简单的解决方案是使用.net framework中的System.Collections.Queue。它可以工作,它很简单,不需要大量的RAM,因为文本行在读取时会被丢弃,但它确实需要安装.net framework。任何版本的.net framework都可以
Option Explicit
Const LastLinesCount = 5
Dim DemoFile : Set DemoFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("demo.txt")
Dim Queue : Set Queue = CreateObject("System.Collections.Queue")
Dim i
Do While Not DemoFile.AtEndOfStream
Queue.Enqueue DemoFile.ReadLine
If Queue.Count > LastLinesCount then Queue.Dequeue
Loop
For i = 1 to LastLinesCount
WScript.echo Queue.Dequeue
Next
DemoFile.Close
为什么
Close()
当您可以设置.Position=0
并重新开始读取它时的第一个流?因为FileSystemObject提供的TextStream对象没有Position属性。您完全正确的想法是ADODB.stream
对象。但是如果写入日志,您建议的方法会有问题在第一次读取完整的文件后,将其发送到“demo.txt”。它能在一次阅读中完成吗?bharat vivek提出了一个合理的担忧,所以我重写了它,在一次阅读中完成所有事情。顺便说一句,我不同意“在vbscript中读取文本文件的某一行”帖子回答了这个问题,因为这个答案需要知道输入文件中未知的行数。读取文件是常见的做法(在这里回答了很多次),试一试,当您的代码出现特定问题时,请回来,我们将尝试回答。
Option Explicit
Const LastLinesCount = 5
Dim DemoFile : Set DemoFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("demo.txt")
Dim Queue : Set Queue = CreateObject("System.Collections.Queue")
Dim i
Do While Not DemoFile.AtEndOfStream
Queue.Enqueue DemoFile.ReadLine
If Queue.Count > LastLinesCount then Queue.Dequeue
Loop
For i = 1 to LastLinesCount
WScript.echo Queue.Dequeue
Next
DemoFile.Close