テキストファイルの読み込み、特定の行を表示するには?

解決


simo  2004-08-28 16:55:33  No: 85316  IP: [192.*.*.*]

はじめましてよろしくお願いします。VB6.0使用。
ファイルシステムオブジェクトを使用してファイルを読み込み、その最後から
2行目の文字列取得したいのですが、一番最後の文字列が表示されてしまいます。

    Dim objFileSystem  As Object
    Dim objFile        As Object
    Dim strFileName    As String
    Dim strRecBuff     As String
    Dim lngLineCounter As Integer
    
    ' 読み込むファイル名
    strFileName = "data.dat"
    ' ファイルシステムオブジェクトへの参照
    Set objFileSystem = CreateObject("Scripting.FileSystemObject")
    ' ファイルを開く
    Set objFile = objFileSystem.OpenTextFile(strFileName)
    ' ファイルの最後に達するまでループ
    Do Until objFile.AtEndOfStream
        ' 読み込んだデータを変数に保存
        strRecBuff = objFile.ReadLine
        ' ループ回数をカウントし、読み込んだ行数とする
        lngLineCounter = lngLineCounter + 1
    Loop
    Debug.Print "読み込んだ行数 ="; lngLineCounter
    Debug.Print strRecBuff
    MsgBox "最後から2行目は何行目" & lngLineCounter - 1
    
    ' ファイルを閉じる
    objFile.Close
    ' オブジェクトを解放
    Set objFileSystem = Nothing
    Set objFile = Nothing
本を読みながら勉強しているのですがよくわかりません。
よろしくお願いします。

編集 削除
ゆう  2004-08-28 19:44:29  No: 85317  IP: [192.*.*.*]

まず、自分の書いたソースで

    Do Until objFile.AtEndOfStream
        ' 読み込んだデータを変数に保存
        strRecBuff = objFile.ReadLine
        ' ループ回数をカウントし、読み込んだ行数とする
        lngLineCounter = lngLineCounter + 1
    Loop

この部分は何をしているのかを説明してもらえますか?
で、このループが終了したときにはstrRecBuffには何が入っていますか?

編集 削除
simo  2004-08-29 09:10:07  No: 85318  IP: [192.*.*.*]

ゆうさん有難うございます。
    Do Until objFile.AtEndOfStream
        ' 読み込んだデータを変数に保存
        strRecBuff = objFile.ReadLine
        ' ループ回数をカウントし、読み込んだ行数とする
        lngLineCounter = lngLineCounter + 1
    Loop
これでテキストファイルの中身が何行あるかカウントしています。
strRecBuffには一番最後の行が入っています。

最後から2行目の、或いは特定の文字列を検索したいのですが、あえて上記の
方法でも構いません。

編集 削除
simo  2004-08-29 09:11:11  No: 85319  IP: [192.*.*.*]

>方法でも構いません。

方法でなくても構いません。

編集 削除
Dental  2004-08-29 14:04:14  No: 85320  IP: [192.*.*.*]

現在の行とは別に、一つ前の行も変数に覚えておくだけでは。

  Do Until objFile.AtEndOfStream
     '前回の「現在行」を、別の変数に退避
     strPreviousBuffer = strCurrentBuffer

     '「現在行」を更新
     strCurrentBuffer = objFile.ReadLine
  Loop
  Debug.Print "[最後から2行目]"; strPreviousBuffer
  Debug.Print "[一番 最後の行]"; strCurrentBuffer

編集 削除
simo  2004-08-29 21:57:23  No: 85321  IP: [192.*.*.*]

Dental さん有難うございます。
自分自身不勉強です。
アドバイスを元に3行前まで読み込むソースにしました。
(読み込んだテキストファイルから改行文字を見つけて切り出すという
考えが色々出来そうですが今は自分は力不足でここまでです。)
どうもです。
    Do Until objFile.AtEndOfStream
        strRecBuff3 = strRecBuff
        ' 読み込んだデータを変数に保存
        strRecBuff = objFile.ReadLine
        strRecBuff2 = strRecBuff
        strRecBuff = objFile.ReadLine
        ' ループ回数をカウントし、読み込んだ行数とする
        lngLineCounter = lngLineCounter + 1

'    Debug.Print strRecBuff
    Loop
'    Debug.Print "読み込んだ行数 ="; lngLineCounter
    Debug.Print strRecBuff
    Debug.Print strRecBuff2
    Debug.Print strRecBuff3

編集 削除