VB.NET - CSVファイル読込処理

CSVファイルを全て読み込み、文字列の2次元配列に戻す関数を説明します。 CSVファイルを読み込むには、Microsoft.VisualBasic.FileIO.TextFieldParserクラスを使用すると割と簡単に処理すことができます。

CSVファイル名を指定し、TextFieldParserクラスのインスタンスを作成し、 さらに区切りの指定及びフィールドが引用符で囲まれているかの指定を行います。

実際のファイルの読込は、1行ずつをReadFields()関数で行います。結果は文字列配列に返りますのでそれを適切に処理してやります。 読込のループの先頭でEndOfDataプロパティをチェックし、これがTrueであれば読込が最後まで来ています。 ループを抜けてファイルを閉じてやればOKです。

関数の戻り値として、文字列の2次元配列にしていますので呼び出し側の処理の例を載せておきます。

CSVファイル読込処理

01''' -----------------------------------------------------------------------------
02''' <summary>
03''' CSVファイルの読込処理
04''' </summary>
05''' <param name="astrFileName">ファイル名
06''' <param name="ablnTab">区切りの指定(True:タブ区切り, False:カンマ区切り)
07''' <param name="ablnQuote">引用符フラグ(True:引用符で囲まれている, False:囲まれていない)
08''' <returns>読込結果の文字列の2次元配列</returns>
09''' -----------------------------------------------------------------------------
10Private Function ReadCsv(ByVal astrFileName As String,
11                         ByVal ablnTab As Boolean,
12                         ByVal ablnQuote As Boolean) As String()()
13    ReadCsv = Nothing
14    'ファイルStreamReader
15    Dim parser As Microsoft.VisualBasic.FileIO.TextFieldParser = Nothing
16    Try
17        'Shift-JISエンコードで変換できない場合は「?」文字の設定
18        Dim encFallBack As System.Text.DecoderReplacementFallback = New System.Text.DecoderReplacementFallback("?")
19        Dim enc As System.Text.Encoding =
20            System.Text.Encoding.GetEncoding("shift_jis", System.Text.EncoderFallback.ReplacementFallback, encFallBack)
21 
22        'TextFieldParserクラス
23        parser = New Microsoft.VisualBasic.FileIO.TextFieldParser(astrFileName, enc)
24 
25        '区切りの指定
26        parser.TextFieldType = FieldType.Delimited
27        If ablnTab = False Then
28            'カンマ区切り
29            parser.SetDelimiters(",")
30        Else
31            'タブ区切り
32            parser.SetDelimiters(vbTab)
33        End If
34 
35        If ablnQuote = True Then
36            'フィールドが引用符で囲まれているか
37            parser.HasFieldsEnclosedInQuotes = True
38        End If
39 
40        'フィールドの空白トリム設定
41        parser.TrimWhiteSpace = False
42 
43        Dim strArr()() As String = Nothing
44        Dim nLine As Integer = 0
45        'ファイルの終端までループ
46        While Not parser.EndOfData
47            'フィールドを読込
48            Dim strDataArr As String() = parser.ReadFields()
49 
50            '戻り値領域の拡張
51            ReDim Preserve strArr(nLine)
52 
53            '退避
54            strArr(nLine) = strDataArr
55            nLine += 1
56        End While
57 
58        '正常終了
59        Return strArr
60 
61    Catch ex As Exception
62        'エラー
63        MsgBox(ex.Message)
64    Finally
65        '閉じる
66        If parser IsNot Nothing Then
67            parser.Close()
68        End If
69    End Try
70End Function
71 
72'仮にテストプログラム
73Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
74    Try
75        Dim arrCsv()() As String = ReadCsv("test.csv", False, False)
76 
77        Dim strData As String = ""
78        For Each arr() As String In arrCsv
79            For Each str As String In arr
80                strData &= str & ","
81            Next
82            strData &= vbCrLf
83        Next
84        MsgBox(strData)
85 
86    Catch ex As Exception
87        MsgBox(ex.Message)
88    End Try
89End Sub

総アクセス数