CSVファイルをデータベースに取り込んで、
データ管理がしたくなることがあります。
銀行口座やクレジットの履歴を取り込むプログラムを作るとき、
CSVの項目にカンマが含まれていて、うまく取込ができないという悩みを聞きます。
CSVの項目にカンマが含まれている場合、
その項目はダブルクォーテーション(")で囲まれています。
CSVの項目に含まれるカンマを除去するVB.netのコードです。
1,2,3,"あいう,えお",4,5
という行を
1,2,3,"あいうえお",4,5
に変換します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Dim sCSVLine As String 'CSVファイルの1行 Dim sText1 As String '取り出した文字列 Dim sTemt2 As String '取り出した文字列から , を削除したもの sCSVLine = "1,2,3,""あいう,えお"",4,5" Dim mc As System.Text.RegularExpressions.MatchCollection = _ System.Text.RegularExpressions.Regex.Matches( _ sCSVLine, "\,\"".+?\""\,") ' ," と ", に囲まれた文字列を取り出す For Each m As System.Text.RegularExpressions.Match In mc sText1 = m.Value ' ,"あいう,えお", 'sText1から、 ,"あいうえお", という文字列を作る sTemt2 = sText1.Replace(",""", "") ' ," を一旦削除 sTemt2 = sTemt2.Replace(""",", "") ' ", を一旦削除 sTemt2 = sTemt2.Replace(",", "") ' , を削除 sTemt2 = ",""" & sTemt2 & """," ' ," と ", を、もう一度つけた sCSVLine = sCSVLine.Replace(sText1, sTemt2) Next |
"あいう,えお"が複数あっても大丈夫です。
"あいう,えお"が、一番最後の項目にあるパターンに対応するには、
CSVの行の最後に , を付けてから処理すればよいです。
"あい""う,えお"
"あいう"",えお"とか"あいう,""えお"というパターンに対応したい場合は、
処理の前で、 "", や ,"" を、別の文字に変換しておいて、
後で、 "" に変換すればよいです。