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