VB.NET - CSVファイル読込処理
CSVファイルを全て読み込み、文字列の2次元配列に戻す関数を説明します。
CSVファイルを読み込むには、Microsoft.VisualBasic.FileIO.TextFieldParserクラスを使用すると割と簡単に処理すことができます。
CSVファイル名を指定し、TextFieldParserクラスのインスタンスを作成し、
さらに区切りの指定及びフィールドが引用符で囲まれているかの指定を行います。
実際のファイルの読込は、1行ずつをReadFields()関数で行います。結果は文字列配列に返りますのでそれを適切に処理してやります。
読込のループの先頭でEndOfDataプロパティをチェックし、これがTrueであれば読込が最後まで来ています。
ループを抜けてファイルを閉じてやればOKです。
関数の戻り値として、文字列の2次元配列にしていますので呼び出し側の処理の例を載せておきます。
CSVファイル読込処理
''' ----------------------------------------------------------------------------- '''''' CSVファイルの読込処理 ''' ''' ファイル名 ''' 区切りの指定(True:タブ区切り, False:カンマ区切り) ''' 引用符フラグ(True:引用符で囲まれている, False:囲まれていない) '''読込結果の文字列の2次元配列 ''' ----------------------------------------------------------------------------- Private Function ReadCsv(ByVal astrFileName As String, ByVal ablnTab As Boolean, ByVal ablnQuote As Boolean) As String()() ReadCsv = Nothing 'ファイルStreamReader Dim parser As Microsoft.VisualBasic.FileIO.TextFieldParser = Nothing Try 'Shift-JISエンコードで変換できない場合は「?」文字の設定 Dim encFallBack As System.Text.DecoderReplacementFallback = New System.Text.DecoderReplacementFallback("?") Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis", System.Text.EncoderFallback.ReplacementFallback, encFallBack) 'TextFieldParserクラス parser = New Microsoft.VisualBasic.FileIO.TextFieldParser(astrFileName, enc) '区切りの指定 parser.TextFieldType = FieldType.Delimited If ablnTab = False Then 'カンマ区切り parser.SetDelimiters(",") Else 'タブ区切り parser.SetDelimiters(vbTab) End If If ablnQuote = True Then 'フィールドが引用符で囲まれているか parser.HasFieldsEnclosedInQuotes = True End If 'フィールドの空白トリム設定 parser.TrimWhiteSpace = False Dim strArr()() As String = Nothing Dim nLine As Integer = 0 'ファイルの終端までループ While Not parser.EndOfData 'フィールドを読込 Dim strDataArr As String() = parser.ReadFields() '戻り値領域の拡張 ReDim Preserve strArr(nLine) '退避 strArr(nLine) = strDataArr nLine += 1 End While '正常終了 Return strArr Catch ex As Exception 'エラー MsgBox(ex.Message) Finally '閉じる If parser IsNot Nothing Then parser.Close() End If End Try End Function '仮にテストプログラム Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try Dim arrCsv()() As String = ReadCsv("test.csv", False, False) Dim strData As String = "" For Each arr() As String In arrCsv For Each str As String In arr strData &= str & "," Next strData &= vbCrLf Next MsgBox(strData) Catch ex As Exception MsgBox(ex.Message) End Try End Sub