2017-02-22 231 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)