CSVの項目にカンマが含まれる場合の処理(VB.net)
CSVファイルをデータベースに取り込んで、
データ管理がしたくなることがあります。
銀行口座やクレジットの履歴を取り込むプログラムを作るとき、
CSVの項目にカンマが含まれていて、うまく取込ができないという悩みを聞きます。
CSVの項目にカンマが含まれている場合、
その項目はダブルクォーテーション(“)で囲まれています。
CSVの項目に含まれるカンマを除去するVB.netのコードです。
1,2,3,“あいう,えお”,4,5
という行を
1,2,3,“あいうえお”,4,5
に変換します。
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の行の最後に , を付けてから処理すればよいです。
“あい""う,えお"
"あいう"",えお”とか”あいう,""えお”というパターンに対応したい場合は、
処理の前で、 "", や ,"" を、別の文字に変換しておいて、
後で、 "" に変換すればよいです。