2017-02-22 146 views
1

我必须通过一个vb脚本从日志文件中读取第5行的最后一行。 有人可以请指导我如何做到这一点?从文本文件中读取第5行最后一行

我正在使用下面的代码,它只读取最后一行并回显最后一行和行数,需要加强它。

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”在这里。

+0

阅读文件是常见的做法*(在这里回答很多次)*,给它一个去,当你有你的代码的特定问题回来,我们会尝试并回答它。 – Lankymart

回答

2

一个简单的解决方案是如何从使用System.Collections.Queue .net框架。它的工作原理很简单,不需要大量的RAM,因为文本行在读取时被丢弃,但它确实需要安装.net框架。任何版本的.net框架都可以。

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 
+0

为什么'close()'第一个流,当你可以设置'.Position = 0'并开始再读一遍? – Lankymart

+0

由于TextStream对象提供的FileSystemObject没有Position属性。 –

+0

你绝对正确的想到了'ADODB.Stream'对象。 – Lankymart

0

听起来像是你可以修剪结束,并获得最后一行(未测试):

Set fso = CreateObject("Scripting.FileSystemObject") 
Set fh = fso.OpenTextFile("E:\Coding\VB\demo.txt") 
text = Trim(fh.ReadAll()) 
i = InStrRev(text, vbLf) 
line = Mid(text, i + 1) 
0

Set fso = CreateObject("Scripting.FileSystemObject") 
Set fh = fso.OpenTextFile("D:\demo.txt") 
strin = Split(fh.readall, vbNewLine) 
wscript.echo strin(fh.Line - 5)