ファイルの読み込みについて への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2010/4/29 16:28:39
こんにちは。
VB(やC#)には行を指定してファイルを読み込む機能はないので、
先頭から目的の行に達するまで1行ずつ読んでいく方式になります。
シンプルに書くと次のようになります。
ただ、これだと融通が利かないうえ、100行目などになると大変なので多少工夫してループで取得する方が良いと思います。
でも、多くのプログラマはさらに進んでこの処理を関数化し、必要な場合には関数を1行呼び出すだけにすると思います。私もこの方式を採ります。
このようにしておけば、使用する箇所ではファイル名と行数を指定するだけです。
他にも場合によっては違うことをやるかもしれません。
たとえば、テキストの行数がかなり少ないことがわかっていて、個人で使用する用のプログラムを作っているのであれば次のように書いてしまうこともできます。
この方法は書くのは簡単なのですが、実行すると内部では対象のテキストファイルを1回すべて読み込んでメモリ上に展開してしまいます。だから巨大なファイルからたった1行を取得したい場合は、そのたった1行のためにメモリを消費してファイルを読み込んでしまいます。
「個人で使用する用」と書いたのは、業務用の場合、対象が小さなファイルだとわかっていても使用しないで済むメモリや読み込みは抑えたいので、この方式は業務用ではちょっと微妙ということです。
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 String, ByVal lineNumber As Integer) As 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行目の「さしすせそ」だけを読み込みたいのです
あいうえお
かきくえこ
さしすせそ
たちつてと
例えば↓のテキストがあって、3行目の「さしすせそ」だけを読み込みたいのです
あいうえお
かきくえこ
さしすせそ
たちつてと
多種類のサンプルを用意していただき驚いてます。
私は関数化されたサンプルを使用し、無事目的の処理をさせることができました。
ありがとうございました。