プロが教える店舗&オフィスのセキュリティ対策術

VBAでテキストデータを読み込みたい時





Set MyTxt = FSO.OpenTextFile(Strpath, 1)


Do While MyTxt.AtEndOfStream = False

aaa = MyTxt.ReadLine

Loop


のようにして読み込むことができます。

途中まで読み込んだ後に、最初の行に戻りたい時とか
指定した行まで飛びたい時にはどうしたら良いですか?

質問者からの補足コメント

  • ありがとうございます。

    指定した行に飛ぶことは無理かも知れませんが
    最初の行から読み直すという操作であれば


    Set MyTxt = Nothing

    Set MyTxt = FSO.OpenTextFile(Strpath, 1)

    とすれば実現できます。
    しかし、この方法は一般的でしょうか?
    OpenTextFileをリセットするコマンドって用意されていませんか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/10/05 12:00
  • ありがとうございます。

    参考になりました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/10/10 15:44

A 回答 (2件)

>Set MyTxt = Nothing


>Set MyTxt = FSO.OpenTextFile(Strpath, 1)
>とすれば実現できます。
>しかし、この方法は一般的でしょうか?
はい、通常、そのようにします。
但し、Set MyTxt = Nothingの前で
MxTxt.Closeを実行したほうがよいでしょう。

>OpenTextFileをリセットするコマンドって用意されていませんか?
残念ながら、ありません。

以下は、ファイルの全行を読み込み、内部に格納し、
先頭行と最終行の内容を画面に表示しています。(もちろん、他の行も可能)
サイズが約25Mバイトの10万行のファイルを読み込んだ場合でも2~3秒で処理できました。(もちろんマシンによる個体差はありますが)
--------------------------------------------------
Option Explicit

Sub Sample()

Dim FSO As Object
Dim OTS As Object
Dim filename As String
Dim strText As String
Dim inCount As Long
Dim strFileName As String
Dim strArray() As String
Set FSO = CreateObject("Scripting.FileSystemObject")

filename = "c:\goo\data.txt"

Set OTS = FSO.OpenTextFile(filename, 1)
inCount = 0
Do While OTS.AtEndOfStream = False
strText = OTS.ReadLine
ReDim Preserve strArray(inCount)
strArray(inCount) = strText
inCount = inCount + 1
Loop
OTS.Close
Set OTS = Nothing
Set FSO = Nothing

Debug.Print "inCount=" + CStr(inCount)
Debug.Print strArray(0)
Debug.Print strArray(inCount - 1)
End Sub


--------------------------------------------------
今回のような場合は、全行読み込んでから、処理したほうが
簡単かと思うのですが、そのようにしたくない理由がなにかあるのでしょうか?
(例えば、ファイルサイズが非常に大きいとかです)
この回答への補足あり
    • good
    • 1

残念ながらReadLineにはそのような機能は提供されていません。


なので、全行を読み込み、内部のメモリに保管しておき、それを参照するのが、
もっとも良い方法でしょう。但し、行数が、あまり多くないことが前提になります。
どのような理由で、そのようなことをなさりたいのかを提示していただければ、
別の解決方法があるかも知れません。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A