カンマ区切りのCSVファイルの場合、文字列をダブルクォーテーションで囲んである場合があります。
VB.netにはCSVファイルを解読する機能がないようです。
スポンサーリンク
こんな感じのファイルがあると困ります。
"abc,de","fghij","klmno"
列の項目ごとに分けて配列に格納する時に、カンマで分けると、abcとdeが分かれてしまいます。
こういう場合は、「","」を一旦、「*<>*」といった、ファイルに含まれないような文字列に置換してから、「,」を削除し、「*<>*」→「","」とすることで回避できます。
-「","」→「*<>*」
"abc,de*<>*fghij*<>*klmno"-「,」→「」
"abcde*<>*fghij*<>*klmno"-「*<>*」→「","」
"abcde","fghij","klmno"
"abc,de*<>*fghij*<>*klmno"-「,」→「」
"abcde*<>*fghij*<>*klmno"-「*<>*」→「","」
"abcde","fghij","klmno"
列が全て文字列ならこれで問題ないのですが、数字が混ざると困ります。
こういうファイルがあった場合の処理を考えてみました。
"abc,d,e","",1,,"fghij,","klmno"
文字列はダブルクォーテーションでくくり、数字はくくらない。
文字列空欄と数字の空欄も含めるようにしました。
カンマを半角スペースに変換するコードです。
Dim strLine As String Dim strTempLine As String Dim strTemp() As String Dim stColumn() As String strLine = """abc,d,e"","""",1,,""fghij,"",""klmno""" strTemp = strLine.Split(",") For i = 0 To UBound(strTemp) - 1 If strTemp(i) = "" Then strTempLine &= strTemp(i) & "," ElseIf strTemp(i) = """" Then '「"」は、最後がカンマで終わる文字列があったことを意味する strTempLine &= strTemp(i) & "," ElseIf strTemp(i) = """""" Then strTempLine &= strTemp(i) & "," ElseIf strTemp(i).StartsWith("""") = True And strTemp(i).EndsWith("""") = False Then '「"」から始まる場合は、半角スペースでつなぐ strTempLine &= strTemp(i) & " " ElseIf strTemp(i).IndexOf("""") = -1 And Not IsNumeric(strTemp(i)) Then strTempLine &= strTemp(i) & " " Else strTempLine &= strTemp(i) & "," End If Next strTempLine &= strTemp(UBound(strTemp)) 'カンマで分割できるようになりました。 stColumn = strTempLine.Split(",")