投稿日 | : 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づつ前にシークしていきます。
ファイルサイズにほとんど影響なく動作すると思います。