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

文字列の2次元配列の内容をCSVファイルに全て書き込む関数を説明します。 CSVファイルに書込む方法は、比較的簡単で、指定されたカラムデータに「”」(ダブルクォート)を全て付加して書込めばできます。

書込みは「Shift-JIS」のEncodingを指定し、System.IO.StreamWriterでファイルを開き、 指定されたカラムデータを順次書き込んで処理します。

今回の関数では CSVファイルの読込について で読込まれたデータを書込むことを 前提にしていますので、書き込みデータは文字列の2次元配列で指定します。

この関数では、全てのカラムデータにダブルクォートで囲っていますが、ダブルクォートが必要なデータのみ囲みたい場合には 指定されたカラムデータ文字列がダブルクォートを必要としているかを検査して処理する必要があります。 文字列の中に、カンマ、タブ、CR、LFが含まれていたり、前後に空白が在ればダブルクォートを必要とします。

CSVファイル書込処理

    ''' -----------------------------------------------------------------------------
    ''' 
    ''' CSVファイルの書込処理
    ''' 
    ''' ファイル名
    ''' 書込データ文字列の2次元配列
    ''' True:結果OK, False:NG
    ''' カラム名をファイルに出力したい場合は、書込データの先頭に設定すること
    ''' -----------------------------------------------------------------------------
    Private Function WriteCsv(ByVal astrFileName As String,
                              ByVal aarrData As String()()) As Boolean
        WriteCsv = False
        'ファイルStreamWriter
        Dim sw As System.IO.StreamWriter = Nothing

        Try
            'CSVファイル書込に使うEncoding
            Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
            '書き込むファイルを開く
            sw = New System.IO.StreamWriter(astrFileName, False, enc)

            For Each arrLine() As String In aarrData
                Dim blnFirst As Boolean = True
                Dim strLIne As String = ""
                For Each str As String In arrLine
                    If blnFirst = False Then
                        '「,」(カンマ)の書込
                        sw.Write(",")
                    End If
                    blnFirst = False
                    '1カラムデータの書込
                    str = """" & str & """"
                    sw.Write(str)
                Next
                '改行の書込
                sw.Write(vbCrLf)
            Next

            '正常終了
            Return True

        Catch ex As Exception
            'エラー
            MsgBox(ex.Message)
        Finally
            '閉じる
            If sw IsNot Nothing Then
                sw.Close()
            End If
        End Try
    End Function

    '仮にテストプログラム
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            'CSVファイル読込処理
            Dim arrCsv()() As String = ReadCsv("test.csv", False, False)
            'CSVファイル書込処理
            Dim blnRet As Boolean = WriteCsv("testw.csv", arrCsv)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub