What is the fastest way to find the value of the last line in a plain text file with records... There are usually thousands of records so a quick and efficient way is necessary.
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub Test_InputAs() Dim Value As String For i = 1 To 20 StartTime = GetTickCount() Value = GetLastLineFromFile_InputAs("C:\yourpath\source.txt") Debug.Print Value Elapsed = (GetTickCount() - StartTime) Debug.Print Elapsed / 1000# & " seconds" Next End Sub Public Function GetLastLineFromFile_InputAs(FilePath As String) As String Dim FileNum As Integer Dim TextLine As String FileNum = FreeFile() Open FilePath For Input As #FileNum Do While Not EOF(FileNum) Line Input #FileNum, TextLine Loop Close FileNum GetLastLineFromFile_InputAs = TextLine End Function
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub Test_FSO() Dim Value As String For i = 1 To 20 StartTime = GetTickCount() Value = GetLastLineFromFile_FSO("C:\yourpath\source.txt") Debug.Print Value Elapsed = (GetTickCount() - StartTime) Debug.Print Elapsed / 1000# & " seconds" Next End Sub Public Function GetLastLineFromFile_FSO(FilePath As String) As String Dim TextLine As String Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(FilePath, 1) Do Until objFile.AtEndOfStream TextLine = objFile.ReadLine Loop objFile.Close GetLastLineFromFile_FSO = TextLine End Function
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long Sub Test_ADO() Dim Value As String For i = 1 To 20 StartTime = GetTickCount() Value = GetLastLineFromFile_ADO("C:\yourpath\", "source.txt") Debug.Print Value Elapsed = (GetTickCount() - StartTime) Debug.Print Elapsed / 1000# & " seconds" Next End Sub Public Function GetLastLineFromFile_ADO(FilePath As String, FileName As String) As String Dim TextLine As String Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim connString As String, SQL As String connString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & FilePath & ";Extensions=asc,csv,tab,txt;" Set conn = New ADODB.Connection conn.ConnectionString = connString conn.Open SQL = "Select * from [" & FileName & "]" Set rs = New ADODB.Recordset rs.Open SQL, conn, 1, 1 If rs.EOF = False Then rs.MoveLast GetLastLineFromFile_ADO = rs(0) & "," & rs(1) & "," & rs(2) End If rs.Close Set rs = Nothing conn.Close Set conn = Nothing End Function
GetLastLineFromFile_ADO = rs(0) & "," & rs(1) & "," & rs(2)
GetLastLineFromFile_ADO = rs(0)
Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.
Comments (0)