CSVHelper(27.1.1)書き込み・読み込みサンプル(VS2019で)


経緯と目的等

.net環境でCSVHelperを利用することがあったため、自分用の覚え書きとして残しました。
一応ジェネリッククラス化してあるので、CSVから読み込んだデータをモデルクラスに格納できるし、逆にモデルクラスのListをCSV形式に変換できる。

CSVHelperを使えるようにする

この時の最新はVersion27.1.1でした。
使用するためには、ソリューションエクスプローラー/NuGetパッケージの管理から”CSVHelper”で検索してインストールでOK(詳細は省略)

サンプル

CSVHelperをインストールした前提としますが、以下のコード

CsvHelperWrap.vb

Imports System.IO
Imports CsvHelper

Public Class CsvHelperWrap(Of TYPE)
    Public Property CsvConfig As New Configuration.CsvConfiguration(Globalization.CultureInfo.InvariantCulture)
    Public Property FilePath As String = ".\file.csv"

    Private SWriter As StreamWriter
    Private CSVHelpWriter As CsvWriter

    Public Sub New()
        Me.CsvConfig.HasHeaderRecord = False
    End Sub


    ''' <summary>
    ''' CSVHelper用のWriteStreamをオープンする
    ''' </summary>
    Public Sub WriteOpen()
        SWriter = New StreamWriter(Me.FilePath, True, Text.Encoding.GetEncoding("SHIFT_JIS"))
        CSVHelpWriter = New CsvWriter(SWriter, CsvConfig)
    End Sub
    ''' <summary>
    ''' CSVHelper用のWriteStreamをクローズする
    ''' </summary>
    Public Sub WriteClose()
        SWriter.Dispose()
        SWriter = Nothing
    End Sub


    ''' <summary>
    ''' 指定したモデルクラスのListをCSVに書き込む
    ''' </summary>
    ''' <param name="dat"></param>
    ''' <remarks>書き込み後は、手動でクローズする前提だが、オープンだけはしてくれる</remarks>
    Public Sub Write(ByVal dat As List(Of TYPE))
        Try
            If SWriter Is Nothing Then
                Call Me.WriteOpen()
            End If
            CSVHelpWriter.WriteRecords(dat)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
    ''' <summary>
    ''' 指定したCSVファイルをモデルクラスのListに読み込む
    ''' </summary>
    ''' <returns></returns>
    Public Function Read() As List(Of TYPE)
        Dim records As New List(Of TYPE)()
        Try
            Using SReader As New StreamReader(Me.FilePath, Text.Encoding.GetEncoding("SHIFT_JIS"))
                Using CSVHelpReader As New CsvReader(SReader, CsvConfig)
                    records = CSVHelpReader.GetRecords(Of TYPE)().ToList
                End Using
            End Using
        Catch ex As Exception
            Throw ex
        End Try
        Return records
    End Function
End Class