Private Sub Command4_Click() Text1.Text = "" CommonDialog1.Filter = "*.txt 文件|*.txt" CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 Do While Not EOF(1) ' 循环至文件尾。 Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。 Text1.Text = TextLine Loop Close #1 End Sub
如果用open读取的话下面的应该是最快的了Open xxx For Input As #1 s = StrConv(InputB$(LOF(1), #1), vbUnicode) Close #1 v=split(s,vbcrlf) msgbox v(ubound(v))
如果想读取最后一行,数据不是定长也可以:Function GetFileLastLine(fName As String) As String 'fName 要处理的文件路径和名称 Dim hFile As Long Dim recNumber1 As Long, recNumber2 As Long Dim Char As String * 1 Dim strTmp As String
recNumber2 = FileLen(fName) '用于定位到最后一个字符 hFile = FreeFile Open fName For Binary As hFile '因为最后一行可能包含空格符回车符等 '所以要先找到最后一个有效字符 '有效字符条件要根据实际情况定,本示例定为字母和数字 Do Get #hFile, recNumber2, Char recNumber2 = recNumber2 - 1 Loop Until Char Like "[0-9a-zA-Z]" '从最后一个有效字符起,再向前找最后一个换行符或回车符 recNumber1 = recNumber2 Do Get #hFile, recNumber1, Char recNumber1 = recNumber1 - 1 Loop Until Char = vbCr Or Char = vbLf '读取最后一行 strTmp = Space(recNumber2 - recNumber1 + 1) Get #hFile, recNumber1 + 1, strTmp Close GetFileLastLine = strTmpEnd Function'调用: Private Sub Command1_Click() Debug.Print GetFileLastLine("D:\db_backup\20100818p.txt") '883,999KB End Sub
偷懒的办法可以用readall全部读出来,然后用split分割取最后一个数组元素或者速度快一点的话用instrRev从后面找vbcrlf然后取出来
Text1.Text = ""
CommonDialog1.Filter = "*.txt 文件|*.txt"
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #1
Do While Not EOF(1) ' 循环至文件尾。
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。
Text1.Text = TextLine
Loop
Close #1
End Sub
s = StrConv(InputB$(LOF(1), #1), vbUnicode)
Close #1
v=split(s,vbcrlf)
msgbox v(ubound(v))
for append
如果不定长,就从最后一个字节逐个向前读,估计读个几十个字节就能读完最后一行了
应该很快
定位最后一行,用binary方法打开文件,put或者get语句的第二个参数就是指定文件写入或读取的位置(字节数),文件结尾就是文件长度,这种方法不需要全部读出文件,楼上有人不要误导....
我现在要在一个文本文件的未尾追加数据,但是我需要知道现在有文件已经到多少了,才能在后面追加
比如文件最后到了
100-baisoft
那么我要在后面追加
101-baisoft
open youFile for append as #1
print #1,youData
close
'fName 要处理的文件路径和名称
Dim hFile As Long
Dim recNumber1 As Long, recNumber2 As Long
Dim Char As String * 1
Dim strTmp As String
recNumber2 = FileLen(fName) '用于定位到最后一个字符
hFile = FreeFile
Open fName For Binary As hFile
'因为最后一行可能包含空格符回车符等
'所以要先找到最后一个有效字符
'有效字符条件要根据实际情况定,本示例定为字母和数字
Do
Get #hFile, recNumber2, Char
recNumber2 = recNumber2 - 1
Loop Until Char Like "[0-9a-zA-Z]"
'从最后一个有效字符起,再向前找最后一个换行符或回车符
recNumber1 = recNumber2
Do
Get #hFile, recNumber1, Char
recNumber1 = recNumber1 - 1
Loop Until Char = vbCr Or Char = vbLf
'读取最后一行
strTmp = Space(recNumber2 - recNumber1 + 1)
Get #hFile, recNumber1 + 1, strTmp
Close
GetFileLastLine = strTmpEnd Function'调用:
Private Sub Command1_Click()
Debug.Print GetFileLastLine("D:\db_backup\20100818p.txt") '883,999KB
End Sub
这个方法可以的,因为使用了指针
当然 还可以采用 instrb() 从最后向前找换行符或回车符,如果行的长度比较长的话,速度将会更快
如果包含中文,只能用instr()了,速度稍慢一点,和vbman2003速度一样。
instrb 比instr 更快