Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 从文本文件中读取最后第五行_Vbscript - Fatal编程技术网

Vbscript 从文本文件中读取最后第五行

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.

我必须通过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.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