2017-02-22 6 views
1

Ich muss die fünfte letzte Zeile aus der Protokolldatei über ein VB-Skript lesen. Kann mir bitte jemand sagen, wie es geht?Lesen Sie die fünfte letzte Zeile aus einer Textdatei

Ich benutze folgenden Code, der nur die letzte Zeile und echo letzte Zeile und Zeile zählt, muss es verbessern.

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 

Inhalte für demo.txt ist wie folgt:

zcZcxZCsdfdfsfd 
aaaaa 
bbbb 
cccc 
dddd 
eeee 

Am Ende gibt es 4 Leerzeilen, und ich habe die „eeee“ hier zu lesen.

+0

Das Lesen einer Datei ist gängige Praxis * (wird hier oft beantwortet) *, versuchen Sie es und wenn Sie ein bestimmtes Problem mit Ihrem Code haben, kommen Sie zurück und wir versuchen es zu beantworten. – Lankymart

Antwort

2

Eine einfache Lösung ist es, die System.Collections.Queue zu verwenden, um von das .net-Framework. Es funktioniert, es ist einfach und benötigt keine große Menge an RAM, weil Textzeilen während des Lesens verworfen werden, aber dafür muss das .net-Framework installiert werden. Jede Version des .NET-Frameworks ist in Ordnung.

+0

Warum 'Close()' den ersten Stream, wenn Sie einfach '.Position = 0' setzen und neu lesen können? – Lankymart

+0

Da das TextStream-Objekt FileSystemObject keine Position-Eigenschaft aufweist. –

+0

Ihr absolutes Recht hat an das 'ADODB.Stream' Objekt gedacht. – Lankymart

0

Klingt wie Sie das Ende trimmen und die letzte Zeile (nicht getestet):

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

Wie wäre es

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