read last line of a file

  • Thread starter Thread starter Mike
  • Start date Start date
M

Mike

Is there a quick way of reading the last line of a plain text file
without having to open it and read each line.

I don't think I can use any of the fancy extensions such as binary mode
or whatever, due to the file being plain text
 
If You write to a file in Random mode, You can use Seek
statement to find last record.
For example:

Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record, MaxSize, RecordNumber ' Declare
variables.
' Open file in random-file mode.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
MaxSize = LOF(1) \ Len(MyRecord) ' Get number of records
in file.
' The loop reads all records starting from the last.
For RecordNumber = MaxSize To MaxSize - 1
Seek #1, RecordNumber ' Set position.
Get #1, , MyRecord ' Read last record.
Next RecordNumber
Close #1 ' Close file.

But, if You use other mode to read data in text file, I
don't know best way to do this. Try it:

Function ReadLastLine(fName As String) As String
Dim fNum As Long
Dim strtemp As String

fNum = FreeFile()
Open fName For Input As #fNum
Do While Not EOF(fNum) 'ignore all line, not last
Line Input #fNum, strtemp
Loop
Close #fNum

ReadLastLine = strtemp

End Function
 
Hi,
Do you know in advance how the files i structured? eg it's created by you,
or is it a standard text file intended to read?
If not intended to read, i stronly recomend to use an other format like
random acccess ilo text mode.
If you still have to use text mode there is no better way than to loop
through the file untill EOF is reported, maybe LineInput might be faster...

/Jonas
 
Do you know in advance how the files i structured? eg it's created by you,
or is it a standard text file intended to read?
If not intended to read, i stronly recomend to use an other format like
random acccess ilo text mode.
If you still have to use text mode there is no better way than to loop
through the file untill EOF is reported, maybe LineInput might be faster...
Just realised the lines in the files are of fixed length - so can use
losmac's method once I have determined the length

I need them to be flat file format for something else that reads those
files
 
Mike

Here's a sub I use to do that

Sub finddstamp()

Dim Fname As String, LastLine As String
Dim Fnum As Integer, i As Integer
Dim CarRet As String

Fname = "C:\Dick\Tester\FindLast.doc"
Fnum = FreeFile

Open Fname For Input As Fnum

For i = LOF(Fnum) To 1 Step -1
Seek #Fnum, i
CarRet = Input(1, #Fnum)
If CarRet = vbCr Or CarRet = vbCrLf Then
Line Input #Fnum, LastLine
MsgBox LastLine
Close Fnum
Exit Sub
End If
Next i

End Sub
 
Back
Top