The program works smoothly even on files of twenty thousand lines. It simply read lines, keeping in memory the last N lines. When it reaches the end of the stream, it return the last N lines kept.
' read all the content of a log file and
' put it into a string.
function log2str( byval filename, byval lastLines )
dim fso
dim file
dim lines()
dim linenum
dim lastWrittenLine
dim out
set fso = createobject( "scripting.filesystemObject" )
set file = fso.openTextFile( filename )
redim lines(lastLines)
linenum = 0
lastWrittenLine = -1
do while not file.atEndOfStream
lines( linenum ) = file.readLine
lastWrittenLine = linenum
linenum = (linenum + 1 ) mod lastLines
loop ' not file.atEndOfStream
if lastWrittenLine > 0 then
linenum = (lastWrittenLine + 1) mod lastLines
do
if lines(linenum) <> "" then
out = out & lines(linenum) & vbCrLf
end if ' lines(linenum) <> ""
linenum = (linenum + 1 ) mod lastLines
loop until linenum = (lastWrittenLine + 1)
end if ' lastWrittenLine
' return all the content
log2str = out
end function ' log2str