ファイルの読み込みについて への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 ルキノ  (社会人) 投稿日時 2010/4/29 20:27:41
るきおさんレスありがとうございます。
多種類のサンプルを用意していただき驚いてます。
私は関数化されたサンプルを使用し、無事目的の処理をさせることができました。
ありがとうございました。
投稿者 るきお  (社会人) 投稿日時 2010/4/29 16:28:39
こんにちは。

VB(やC#)には行を指定してファイルを読み込む機能はないので、
先頭から目的の行に達するまで1行ずつ読んでいく方式になります。

シンプルに書くと次のようになります。
    
Dim reader As New IO.StreamReader("C:\Test\Text1.txt")
Dim line As String

line = reader.ReadLine '1行目 
line = reader.ReadLine '2行目 
line = reader.ReadLine '3行目 

reader.Close()

MsgBox("3行目は" & vbNewLine & line & vbNewLine & "でした。")


ただ、これだと融通が利かないうえ、100行目などになると大変なので多少工夫してループで取得する方が良いと思います。

   
Dim reader As New IO.StreamReader("C:\Test\Text1.txt")
Dim line As String = ""

For lineNumer As Integer = 1 To 3
    line = reader.ReadLine
Next

reader.Close()

MsgBox("3行目は" & vbNewLine & line & vbNewLine & "でした。")


でも、多くのプログラマはさらに進んでこの処理を関数化し、必要な場合には関数を1行呼び出すだけにすると思います。私もこの方式を採ります。
   
Private Function ReadFileLine(ByVal fileName As StringByVal lineNumber As IntegerAs String

    Dim reader As New IO.StreamReader(fileName)
    Dim line As String = ""

    For lineNumer As Integer = 1 To lineNumber
        line = reader.ReadLine
    Next

    reader.Close()

    Return line

End Function


このようにしておけば、使用する箇所ではファイル名と行数を指定するだけです。
   
Dim line As String = ReadFileLine("C:\Test\Text1.txt", 3)
MsgBox("3行目は" & vbNewLine & line & vbNewLine & "でした。")


他にも場合によっては違うことをやるかもしれません。
たとえば、テキストの行数がかなり少ないことがわかっていて、個人で使用する用のプログラムを作っているのであれば次のように書いてしまうこともできます。

    
Dim line As String = IO.File.ReadAllLines("C:\Test\Text1.txt")(2)
MsgBox("3行目は" & vbNewLine & line & vbNewLine & "でした。")


この方法は書くのは簡単なのですが、実行すると内部では対象のテキストファイルを1回すべて読み込んでメモリ上に展開してしまいます。だから巨大なファイルからたった1行を取得したい場合は、そのたった1行のためにメモリを消費してファイルを読み込んでしまいます。

「個人で使用する用」と書いたのは、業務用の場合、対象が小さなファイルだとわかっていても使用しないで済むメモリや読み込みは抑えたいので、この方式は業務用ではちょっと微妙ということです。
投稿者 ルキノ  (社会人) 投稿日時 2010/4/29 15:08:14
テキストファイルのテキストを指定した行の部分だけ読み込むにはどうしたらいいのでしょうか?
例えば↓のテキストがあって、3行目の「さしすせそ」だけを読み込みたいのです
あいうえお
かきくえこ
さしすせそ
たちつてと