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

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

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

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

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

CSVファイル書込処理

01''' -----------------------------------------------------------------------------
02''' <summary>
03''' CSVファイルの書込処理
04''' </summary>
05''' <param name="astrFileName">ファイル名
06''' <param name="aarrData">書込データ文字列の2次元配列
07''' <returns>True:結果OK, False:NG</returns>
08''' <remarks>カラム名をファイルに出力したい場合は、書込データの先頭に設定すること</remarks>
09''' -----------------------------------------------------------------------------
10Private Function WriteCsv(ByVal astrFileName As String,
11                          ByVal aarrData As String()()) As Boolean
12    WriteCsv = False
13    'ファイルStreamWriter
14    Dim sw As System.IO.StreamWriter = Nothing
15 
16    Try
17        'CSVファイル書込に使うEncoding
18        Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
19        '書き込むファイルを開く
20        sw = New System.IO.StreamWriter(astrFileName, False, enc)
21 
22        For Each arrLine() As String In aarrData
23            Dim blnFirst As Boolean = True
24            Dim strLIne As String = ""
25            For Each str As String In arrLine
26                If blnFirst = False Then
27                    '「,」(カンマ)の書込
28                    sw.Write(",")
29                End If
30                blnFirst = False
31                '1カラムデータの書込
32                str = """" & str & """"
33                sw.Write(str)
34            Next
35            '改行の書込
36            sw.Write(vbCrLf)
37        Next
38 
39        '正常終了
40        Return True
41 
42    Catch ex As Exception
43        'エラー
44        MsgBox(ex.Message)
45    Finally
46        '閉じる
47        If sw IsNot Nothing Then
48            sw.Close()
49        End If
50    End Try
51End Function
52 
53'仮にテストプログラム
54Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
55    Try
56        'CSVファイル読込処理
57        Dim arrCsv()() As String = ReadCsv("test.csv", False, False)
58        'CSVファイル書込処理
59        Dim blnRet As Boolean = WriteCsv("testw.csv", arrCsv)
60 
61    Catch ex As Exception
62        MsgBox(ex.Message)
63    End Try
64End Sub

総アクセス数