Option Explicit Function Readlast(strFile$) As String Dim lFileLen&, lPoint&, iFileNum%, i&, strTemp$ Dim arrBuf() As Byte, arrStr() As String iFileNum = FreeFile Open strFile For Binary As #iFileNum ReDim arrBuf(LOF(iFileNum) - 1) Get #iFileNum, , arrBuf strTemp = StrConv(arrBuf, vbUnicode) arrStr = Split(strTemp, vbCrLf)
Readlast = arrStr(UBound(arrStr)) '这是最后一行
'Readlast = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
'Readlast = arrStr(UBound(arrStr) - 2) '这是最倒数后三行
'lPoint = LOF(iFileNum) - 2 'lFileLen = lPoint 'Debug.Print "Point >>>"; lPoint 'Do 'lFileLen = lFileLen - 1023 'If (lFileLen < 1) Then lFileLen = 1 'Debug.Print ">>>Point >>>"; lPoint 'Debug.Print ">>>lFileLen >>>"; lFileLen 'Get #iFileNum, lFileLen, arrBuf 'If (lPoint > 1023) Then 'i = 1023 'Else 'i = lPoint 'End If 'While (i > 0) 'If (arrBuf(i) = 10) Then 'If (arrBuf(i - 1) = 13) Then 'lFileLen = lFileLen + i + 1 'Exit Do 'End If 'End If 'i = i - 1 'Wend 'If (lFileLen < 2) Then Exit Do 'lPoint = lPoint - 1023 'Loop 'Close #iFileNum 'iFileNum = FreeFile() 'Open strFile For Input As #iFileNum 'Seek #iFileNum, lFileLen 'Line Input #iFileNum, strTemp 'Close #iFileNum
End Function Private Sub Command1_Click() Debug.Print Readlast("c:\txt.txt") End Sub
本帖最后由 bcrun 于 2012-05-31 09:32:23 编辑
Option Explicit Function Readlast(ByVal strFile$, ByRef str1 As String, ByRef str2 As String) As String Dim lFileLen&, lPoint&, iFileNum%, i&, strTemp$ Dim arrBuf() As Byte, arrStr() As String iFileNum = FreeFile Open strFile For Binary As #iFileNum ReDim arrBuf(LOF(iFileNum) - 1) Get #iFileNum, , arrBuf
'lPoint = LOF(iFileNum) - 2 'lFileLen = lPoint 'Debug.Print "Point >>>"; lPoint 'Do 'lFileLen = lFileLen - 1023 'If (lFileLen < 1) Then lFileLen = 1 'Debug.Print ">>>Point >>>"; lPoint 'Debug.Print ">>>lFileLen >>>"; lFileLen 'Get #iFileNum, lFileLen, arrBuf 'If (lPoint > 1023) Then 'i = 1023 'Else 'i = lPoint 'End If 'While (i > 0) 'If (arrBuf(i) = 10) Then 'If (arrBuf(i - 1) = 13) Then 'lFileLen = lFileLen + i + 1 'Exit Do 'End If 'End If 'i = i - 1 'Wend 'If (lFileLen < 2) Then Exit Do 'lPoint = lPoint - 1023 'Loop 'Close #iFileNum 'iFileNum = FreeFile() 'Open strFile For Input As #iFileNum 'Seek #iFileNum, lFileLen 'Line Input #iFileNum, strTemp 'Close #iFileNum
End Function Private Sub Command1_Click() Dim s1 As String, s2 As String, s3 As String s1 = Readlast("c:\txt.txt", s2, s3) 's1返回倒数第一行,s2返回倒数第二行,s3返回倒数第三行。 Debug.Print s1, s2, s3 '分别是倒数第一行,倒数第二行,倒数第三行。 End Sub
Function Readlast(strFile$) As String
Dim lFileLen&, lPoint&, iFileNum%, i&, strTemp$
Dim arrBuf() As Byte, arrStr() As String
iFileNum = FreeFile
Open strFile For Binary As #iFileNum
ReDim arrBuf(LOF(iFileNum) - 1)
Get #iFileNum, , arrBuf
strTemp = StrConv(arrBuf, vbUnicode)
arrStr = Split(strTemp, vbCrLf)
Readlast = arrStr(UBound(arrStr)) '这是最后一行
'Readlast = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
'Readlast = arrStr(UBound(arrStr) - 2) '这是最倒数后三行
'lPoint = LOF(iFileNum) - 2
'lFileLen = lPoint
'Debug.Print "Point >>>"; lPoint
'Do
'lFileLen = lFileLen - 1023
'If (lFileLen < 1) Then lFileLen = 1
'Debug.Print ">>>Point >>>"; lPoint
'Debug.Print ">>>lFileLen >>>"; lFileLen
'Get #iFileNum, lFileLen, arrBuf
'If (lPoint > 1023) Then
'i = 1023
'Else
'i = lPoint
'End If
'While (i > 0)
'If (arrBuf(i) = 10) Then
'If (arrBuf(i - 1) = 13) Then
'lFileLen = lFileLen + i + 1
'Exit Do
'End If
'End If
'i = i - 1
'Wend
'If (lFileLen < 2) Then Exit Do
'lPoint = lPoint - 1023
'Loop
'Close #iFileNum
'iFileNum = FreeFile()
'Open strFile For Input As #iFileNum
'Seek #iFileNum, lFileLen
'Line Input #iFileNum, strTemp
'Close #iFileNum
End Function
Private Sub Command1_Click()
Debug.Print Readlast("c:\txt.txt")
End Sub
Function Readlast(ByVal strFile$, ByRef str1 As String, ByRef str2 As String) As String
Dim lFileLen&, lPoint&, iFileNum%, i&, strTemp$
Dim arrBuf() As Byte, arrStr() As String
iFileNum = FreeFile
Open strFile For Binary As #iFileNum
ReDim arrBuf(LOF(iFileNum) - 1)
Get #iFileNum, , arrBuf
Close #iFileNum
strTemp = StrConv(arrBuf, vbUnicode)
arrStr = Split(strTemp, vbCrLf)
Readlast = arrStr(UBound(arrStr)) '这是最后一行
str1 = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
str2 = arrStr(UBound(arrStr) - 2) '这是最倒数后三行
'lPoint = LOF(iFileNum) - 2
'lFileLen = lPoint
'Debug.Print "Point >>>"; lPoint
'Do
'lFileLen = lFileLen - 1023
'If (lFileLen < 1) Then lFileLen = 1
'Debug.Print ">>>Point >>>"; lPoint
'Debug.Print ">>>lFileLen >>>"; lFileLen
'Get #iFileNum, lFileLen, arrBuf
'If (lPoint > 1023) Then
'i = 1023
'Else
'i = lPoint
'End If
'While (i > 0)
'If (arrBuf(i) = 10) Then
'If (arrBuf(i - 1) = 13) Then
'lFileLen = lFileLen + i + 1
'Exit Do
'End If
'End If
'i = i - 1
'Wend
'If (lFileLen < 2) Then Exit Do
'lPoint = lPoint - 1023
'Loop
'Close #iFileNum
'iFileNum = FreeFile()
'Open strFile For Input As #iFileNum
'Seek #iFileNum, lFileLen
'Line Input #iFileNum, strTemp
'Close #iFileNum
End Function
Private Sub Command1_Click()
Dim s1 As String, s2 As String, s3 As String
s1 = Readlast("c:\txt.txt", s2, s3) 's1返回倒数第一行,s2返回倒数第二行,s3返回倒数第三行。
Debug.Print s1, s2, s3 '分别是倒数第一行,倒数第二行,倒数第三行。
End Sub
此处下标越界
很可能是文本文件的问题,没有换行符。If UBound(arrStr) >= 1 Then str1 = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
If UBound(arrStr) >= 2 Then str1 = arrStr(UBound(arrStr) - 2) '这是倒数最后三行
按行倒序输出指定文本文件内容的命令行工具。支持大于2GB的文本文件。
http://download.csdn.net/detail/zhao4zhong1/4311265