投稿時間:2003/06/02(Mon) 20:25 投稿者名:Lantern
Eメール:
URL :
タイトル:Re: ファイルより最終行のみ所得したい
バイナリで開いて高速読み込みしてみました。
Dim sf As String Dim ff As Integer Dim sBuf As String Dim bBuf() As Byte '読み込み用バイト配列 Dim lLen As Long 'ファイル長 Dim lPos As Long '現在位置用 sf$ = "C:\Test001.txt" ff% = FreeFile()
Open sf$ For Binary Access Read As #ff% ReDim bBuf(1) As Byte '2Byte配列 lLen& = LOF(ff%) 'ファイルバイト長 Seek #ff%, lLen& - 2 '最後尾-2にシーク Get #ff%, , bBuf() '2Byte読み込みし、CrLfと比較 If StrComp(StrConv(bBuf(), vbUnicode), vbCrLf, vbBinaryCompare) = 0 Then lLen& = lLen& - 2 'CrLfの場合さらに-2 End If lPos& = lLen& - 2& Seek #ff%, lPos& '最後尾-2にシーク Get #ff%, , bBuf(): lPos& = lPos& + 2& '2Byte読み込みと現在位置更新 Do Until StrComp(StrConv(bBuf(), vbUnicode), vbCrLf, vbBinaryCompare) = 0 lPos& = lPos& - 3& '更に1Byte前へシーク Seek #ff%, lPos& Get #ff%, , bBuf(): lPos& = lPos& + 2& '2Byte読み込みと現在位置更新 Loop 'CrLf以降を読み込む ReDim bBuf(lLen& - lPos& - 1&) As Byte Get #ff%, , bBuf() sBuf$ = StrConv(bBuf(), vbUnicode) Close #ff%
最後尾−2(CrLfの場合は−4)にシークし、2バイトづつ読み込み CrLfと比較しながら1Byteづつ前にシークしていきます。 ファイルサイズにほとんど影響なく動作すると思います。
|