ここではTextFieldParserクラスを使ってCSVファイルを読み込む方法について紹介します。

TextFieldParserクラスとは

Microsoft.VisualBasic.FileIO名前空間にあるTextFieldParserクラスを使用することで、指定した区切りのCSVファイルを簡単に読み込むことができます。

以下はTextFieldParserクラスの主なプロパティです。

プロパティ説明
Delimitersテキスト ファイルの区切り記号を定義します。
EndOfData現在のカーソル位置とファイルの終端との間に、空行またはコメント行以外のデータが存在しない場合、True を返します。
HasFieldsEnclosedInQuotes区切り記号入りファイルを解析する場合に、フィールドが引用符で囲まれているかどうかを示します。
フィールドが引用符で囲まれている場合は True。それ以外の場合は False。
LineNumber現在の行番号を返します。ストリームから取り出す文字がなくなった場合は -1 を返します。
TrimWhiteSpaceフィールド値から前後の空白をトリムするかどうかを示します。


CSVファイルを読み込む

テスト用に以下のCSVファイルを用意します。文字コードはShift_JISです。

地方区分,都道府県番号,都道府県名,県庁所在地
北海道地方,1,北海道,札幌市
東北地方,2,青森県,青森市
東北地方,3,岩手県,盛岡市
東北地方,4,宮城県,仙台市
東北地方,5,秋田県,秋田市
東北地方,6,山形県,山形市
東北地方,7,福島県,福島市


次のサンプルプログラムでは、CSVファイルを読み込んでコンソールに表示するプログラムです。

Imports System
Imports System.Text
Imports Microsoft.VisualBasic.FileIO

Module Program
    Sub Main(args As String())
        ' エンコーディング プロバイダーを登録
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)

        Try
            Using parser As New TextFieldParser("C:\temp\都道府県.csv",
                                Encoding.GetEncoding("Shift_JIS"))

                ' カンマ区切りの読み取りを指定する
                parser.TextFieldType = FieldType.Delimited
                parser.SetDelimiters(",")

                ' ファイルの終端までループする
                While Not parser.EndOfData
                    Dim field As String() = parser.ReadFields()

                    ' /(スラッシュ)で区切る
                    For Each item In field
                        Console.Write(item & "/")
                    Next
                    Console.WriteLine()
                End While
            End Using

        Catch ex As Exception
            Console.WriteLine(ex.Message)

        End Try
    End Sub
End Module


以上、TextFieldParserクラスを使ってCSVファイルを読み込む方法について解説しました。