VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -