VB.NET - CSVファイル読込処理
CSVファイルを全て読み込み、文字列の2次元配列に戻す関数を説明します。
CSVファイルを読み込むには、Microsoft.VisualBasic.FileIO.TextFieldParserクラスを使用すると割と簡単に処理すことができます。
CSVファイル名を指定し、TextFieldParserクラスのインスタンスを作成し、
さらに区切りの指定及びフィールドが引用符で囲まれているかの指定を行います。
実際のファイルの読込は、1行ずつをReadFields()関数で行います。結果は文字列配列に返りますのでそれを適切に処理してやります。
読込のループの先頭でEndOfDataプロパティをチェックし、これがTrueであれば読込が最後まで来ています。
ループを抜けてファイルを閉じてやればOKです。
関数の戻り値として、文字列の2次元配列にしていますので呼び出し側の処理の例を載せておきます。
CSVファイル読込処理
01 | ''' ----------------------------------------------------------------------------- |
02 | ''' <summary> |
03 | ''' CSVファイルの読込処理 |
04 | ''' </summary> |
05 | ''' <param name="astrFileName">ファイル名 |
06 | ''' <param name="ablnTab">区切りの指定(True:タブ区切り, False:カンマ区切り) |
07 | ''' <param name="ablnQuote">引用符フラグ(True:引用符で囲まれている, False:囲まれていない) |
08 | ''' <returns>読込結果の文字列の2次元配列</returns> |
09 | ''' ----------------------------------------------------------------------------- |
10 | Private Function ReadCsv( ByVal astrFileName As String , |
11 | ByVal ablnTab As Boolean , |
12 | ByVal ablnQuote As Boolean ) As String ()() |
13 | ReadCsv = Nothing |
14 | 'ファイルStreamReader |
15 | Dim parser As Microsoft.VisualBasic.FileIO.TextFieldParser = Nothing |
16 | Try |
17 | 'Shift-JISエンコードで変換できない場合は「?」文字の設定 |
18 | Dim encFallBack As System.Text.DecoderReplacementFallback = New System.Text.DecoderReplacementFallback( "?" ) |
19 | Dim enc As System.Text.Encoding = |
20 | System.Text.Encoding.GetEncoding( "shift_jis" , System.Text.EncoderFallback.ReplacementFallback, encFallBack) |
21 |
22 | 'TextFieldParserクラス |
23 | parser = New Microsoft.VisualBasic.FileIO.TextFieldParser(astrFileName, enc) |
24 |
25 | '区切りの指定 |
26 | parser.TextFieldType = FieldType.Delimited |
27 | If ablnTab = False Then |
28 | 'カンマ区切り |
29 | parser.SetDelimiters( "," ) |
30 | Else |
31 | 'タブ区切り |
32 | parser.SetDelimiters(vbTab) |
33 | End If |
34 |
35 | If ablnQuote = True Then |
36 | 'フィールドが引用符で囲まれているか |
37 | parser.HasFieldsEnclosedInQuotes = True |
38 | End If |
39 |
40 | 'フィールドの空白トリム設定 |
41 | parser.TrimWhiteSpace = False |
42 |
43 | Dim strArr()() As String = Nothing |
44 | Dim nLine As Integer = 0 |
45 | 'ファイルの終端までループ |
46 | While Not parser.EndOfData |
47 | 'フィールドを読込 |
48 | Dim strDataArr As String () = parser.ReadFields() |
49 |
50 | '戻り値領域の拡張 |
51 | ReDim Preserve strArr(nLine) |
52 |
53 | '退避 |
54 | strArr(nLine) = strDataArr |
55 | nLine += 1 |
56 | End While |
57 |
58 | '正常終了 |
59 | Return strArr |
60 |
61 | Catch ex As Exception |
62 | 'エラー |
63 | MsgBox(ex.Message) |
64 | Finally |
65 | '閉じる |
66 | If parser IsNot Nothing Then |
67 | parser.Close() |
68 | End If |
69 | End Try |
70 | End Function |
71 |
72 | '仮にテストプログラム |
73 | Private Sub Button1_Click(sender As Object , e As EventArgs) Handles Button1.Click |
74 | Try |
75 | Dim arrCsv()() As String = ReadCsv( "test.csv" , False , False ) |
76 |
77 | Dim strData As String = "" |
78 | For Each arr() As String In arrCsv |
79 | For Each str As String In arr |
80 | strData &= str & "," |
81 | Next |
82 | strData &= vbCrLf |
83 | Next |
84 | MsgBox(strData) |
85 |
86 | Catch ex As Exception |
87 | MsgBox(ex.Message) |
88 | End Try |
89 | End Sub |