tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
テキストファイルを読み込みテキストボックスに表示(VB.NET) ( No.22 )  [親スレッドへ]
日時: 2013/02/19 23:13
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[テキストボックス][ファイル入出力][]                                *
* キーワード:TextBox,テキストファイルを読み込み,読込,Text ファイル,txt ファイル  *  
***********************************************************************************
'----------------------------------------------------------------------------------
SampleNo:028
投 稿 日:2013/02/19  
投 稿 者:VBレスキュー(花ちゃん)  
動作確認:Windows Vista / Windows 7 / VB2010 Pro SP1Rel / Framework 4.0 SP1Rel で
[Option Compare Text][Option Explicit On][Option Infer On][Option Strict On]で確認
'========1=========2=========3=========4=========5=========6=========7=========8===

1.テキストファイルを丸ごと読み込みテキストボックスに表示。
2.テキストファイルを1行づつ読み込みテキストボックスに表示。

  テキストファイルは、各自ご用意ください。
  どちらの方法でも1Mバイトのファイルを読み込みテキストボックスに表示した場合
   0.5 秒以下で読み込み表示できます。

'----------------------------------------------------------------------------------

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
'テキストファイルを丸ごと読み込みテキストボックスに表示
   TextBox1.Clear()
   Dim filePath As String = "..\..\..\data\test.txt"
   Try
      'テキストファイルを現在のエンコード(シフトJIS)で開く
      Using sr As New System.IO.StreamReader(filePath, System.Text.Encoding.Default)
         'テキストボックスに読込み表示
         TextBox1.Text = sr.ReadToEnd
      End Using
   Catch ex As Exception
      MessageBox.Show(ex.Message)
   End Try
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button2.Click
'テキストファイルを1行づつ読み込む
   TextBox1.Clear()
   Dim filePath As String = "..\..\..\data\test.txt"
   Try
      Using sr As New System.IO.StreamReader(filePath, System.Text.Encoding.Default)
         '補足1. 参照
         Dim sb As New System.Text.StringBuilder(CInt(New System.IO.FileInfo(filePath).Length))
         'ファイルの最後までループ
         Do Until sr.Peek = -1
            '1行づつ読込み連結(文字列の連結が高速に処理される)
      '加工が必要な行等がある場合は、ここで処理する
            sb.Append(sr.ReadLine & vbCrLf)
         Loop
         '読込んだデータをテキストボックスに表示
         TextBox1.Text = sb.ToString()
      End Using
   Catch ex As Exception
      MessageBox.Show(ex.Message)
   End Try
End Sub


'----------------------------------------------------------------------------------
補足1.
   読込むテキストファイルのバッファを確保、サイズ 0 でも問題ないが、ある程度サイズが
  予測できる場合は、指定しておく、詳しくは、MSDN 参照。
  ここでは、読み込むファイルのサイズを指定することにします。
    本来は、ファイルサイズではなく、ファイルの文字数を指定するべきですが、読み込む前に
  ファイルの文字列長が解らないので、それに近いサイズは、ファイルサイズで得られるので
  代用しております。

  今回テストしてみると
  使用したファイルサイズ=2710 バイト    TextBox1.Text.Length = 1458
    StreamReader(2710)    の時の Debug.Print(sb.Capacity.ToString) 結果 = 2710
  StreamReader()        の時のDebug.Print(sb.Capacity.ToString)   結果 = 2336 
  StreamReader(1458)     の時のDebug.Print(sb.Capacity.ToString)   結果 = 1458
  StreamReader(1000)     の時のDebug.Print(sb.Capacity.ToString)   結果 = 2000
  
    このように、足りなくなればSystem.Text.StringBuilderは自動で拡張しますので問題は
  おきませんが、その分効率は悪くなるといえます。
  従って、少し位メモリが無駄になっても、少し多めにとっておいた方がよいかと。



 [スレッド一覧へ] [親スレッドへ]