Visual Basic 2005 または Visual Basic .NET で System.IO を使用してテキスト ファイルを読み取る方法

文書翻訳 文書翻訳
文書番号: 302309 - 対象製品
この記事は、以前は次の ID で公開されていました: JP302309
Microsoft Visual C# .NET については、次の資料を参照してください。306777
Microsoft Visual Basic 6.0 については、次の資料を参照してください。183638
すべて展開する | すべて折りたたむ

目次

概要

この資料では、テキスト ファイルから情報を取り出し、その情報を ArrayList クラスを使用して表示する方法を説明します。

Visual Basic 2005 または Visual Basic .NET でのテキスト ファイルの読み取り

ファイルに書き込む必要がない場合でも、読み取りアクセスでファイルを開いて読み取ることは、入力/出力 (IO) 機能の重要部分です。この例では読み取り用にファイルを開いていますが、この例はテキスト ファイルには有効であり、バイナリ ファイルには適切ではありません。この例では、ファイルを開くために使用できる多くのメソッドのうちの 1 つを使用します。ファイルから取得した情報を格納するために多くのデータ構造が利用できますが、ArrayList クラスは最も簡単に使用できるデータ構造です。この例では、ファイルを開いて読み取るために、System.IO 名前空間のオブジェクト、具体的には System.IO.StreamReader クラスのオブジェクトを使用します。

: この例を実行するには、読み取り元となる何らかのテキスト ファイル (.txt) が必要です。

Microsoft Visual Basic 2005 または Microsoft Visual Basic .NET からテキスト ファイルを読み込んで読み取るには、以下の手順を実行します。
  1. Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET を起動します。Visual Basic で新しいコンソール アプリケーションを作成します。Visual Studio によって空の Main() プロシージャを持つモジュールが作成されます。
  2. プロジェクトが少なくとも System 名前空間を参照するようにします。System 名前空間、System.IO 名前空間、および System.Collections 名前空間で宣言を修飾しなくても済むように、これらの名前空間の Imports ステートメントを使用します。他のすべての宣言より前にこれらのステートメントを使用する必要があります。
    Imports System
    Imports System.IO
    Imports System.Collections
    					
  3. 読み取り用のファイルを開くには、StreamReader オブジェクトの新しいインスタンスを作成して、次のようにファイルのパスをコンストラクタに渡します。
    Dim objReader As New StreamReader("c:\test.txt")
    					
  4. 処理するファイルの各行を格納するための文字列変数が必要になります。これらの行を ArrayList に追加するので、同様にその型のオブジェクトを宣言して作成します。
    Dim sLine As String = ""
    Dim arrText As New ArrayList()
    					
  5. ファイル全体を一度に読み取る ReadToEnd メソッドなど、ファイルを読み取る方法はいくつかあります。ただし、この例では、ReadLine メソッドを使用して、ファイルから一度に 1 行ずつ取り込んでいます。ファイルの終わりに達すると、このメソッドは "Nothing" を返し、これによってループを終了できます。ファイルから各行を読み取るときに、ArrayList の Add メソッドを使用して、ArrayList クラスに行を挿入できます。
    Do
        sLine = objReader.ReadLine()
        If Not sLine Is Nothing Then
            arrText.Add(sLine)
        End If
    Loop Until sLine Is Nothing
    objReader.Close()
    					
  6. 次のように、"For Each" ループを使用して、新たに入力された ArrayList の内容をコンソールに出力します。
    For Each sLine In arrText
        Console.WriteLine(sLine)
    Next
    Console.ReadLine()
    					
  7. コードを保存して実行すると、コンソールにファイルの内容が表示されます。

完全なコード リスト

Imports System
Imports System.IO
Imports System.Collections

Module Module1

    Sub Main()
        Dim objReader As New StreamReader("c:\test.txt")
        Dim sLine As String = ""
        Dim arrText As New ArrayList()

        Do
            sLine = objReader.ReadLine()
            If Not sLine Is Nothing Then
                arrText.Add(sLine)
            End If
        Loop Until sLine Is Nothing
        objReader.Close()

        For Each sLine In arrText
            Console.WriteLine(sLine)
        Next
        Console.ReadLine()
    End Sub

End Module
				

注意点

ファイル I/O を扱うときの注意点がいくつかあります。以下は注意点の一部です。
  • ファイルにアクセスするときは、読み取りまたは書き込みを行うファイルがシステム上に存在しないか、または使用中である可能性があります。
  • この例ではファイルを処理する前に、ファイル全体をメモリに読み取ります。ファイルが非常に大きくてメモリに保持できないか、またはファイルにアクセスする権限がない場合があります。
これらの状況が原因で例外が発生します。これらの一般的な問題を解決するためには try...catch ブロックを用意することが常に適切な方法です。

関連情報

詳細については、次の Microsoft .NET SDK クイック スタート チュートリアル Web サイトを参照してください。
http://ja.gotdotnet.com/quickstart/default.aspx
Visual Basic .NET に関する、より一般的な情報については、以下の Usenet ニュースグループを参照してください。
Visual Basic .NET 内のディスカッション

プロパティ

文書番号: 302309 - 最終更新日: 2006年10月3日 - リビジョン: 2.1
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
キーワード:?
kbhowtomaster kbvs2005applies kbvs2005swept KB302309
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com