2010年9月25日土曜日

CSVに含まれるダブルクォーテーションを取り除くには

Check
CSVの区切り文字としてダブルクォーテーションが含まれる場合、次のコードをvbsファイルとして保存することで、ドラッグ&ドロップ、もしくはVBSファイルの後ろに引数でファイル名を渡して実行することで、新しいファイル名「@_hoge.csv」が作成できる。

(sample.vbs)
'オブジェクト宣言(FileSystemObject)
Set objFso = CreateObject("Scripting.FileSystemObject")

'引数チェック
fname = WScript.Arguments.Item(0)

'拡張子チェック(CSV)
If objFso.GetExtensionName(fname) = "csv" Then

'オブジェクト宣言(OpenTextFile)
Set objTxIn = objFso.OpenTextFile(fname)

'フルパス
path = objFso.GetParentFolderName(fname) & "\"

'ファイル名
txOut = path & "@_" & objFso.GetFileName(fname)

'オブジェクト宣言(CreateTextFile)
Set objTxOut = objFso.CreateTextFile(txOut)
'オブジェクト宣言(OpenTextFile)
Set objRegexp = New RegExp

With objRegexp
.Pattern ="""([^""]+)"""
.Global=True
End With

Do Until objTxIn.AtEndOfStream =True
txTmp = objTxIn.ReadLine()
Set Matches = objRegexp.Execute(txTmp)
txOut = txTmp

For Each Match in Matches
txOut = objRegexp.Replace(txTmp, "$1")
' txOut = Replace(txOut, ",",",'")
Next

objTxOut.WriteLine(txOut)
Loop

objTxOut.Write(txOut)
objTxIn.Close()
objTxOut.Close()
MsgBox("終了")
Else
'txtファイル以外の場合
MsgBox("csvファイルをドロップダウンしてください")
End If

たとえばこんなCSVファイルなら

"地域","店舗名","住所","tel"
"北海道","○×店,札幌市○×区1-1","xxx-xxx-xxxx"
北海道","××店","札幌市××区2-2","xxx-xxx-xxxx"
北海道","△△店","札幌市△△区3-3","xxx-xxx-xxxx"
"北海道","○○店","札幌市○○区2-1","xxx-xxx-xxxx"
このようになる。

地域,店舗名,住所,tel
北海道,○×店,札幌市○×区1-1,xxx-xxx-xxxx
北海道,××店,札幌市××区2-2,xxx-xxx-xxxx
北海道,△△店,札幌市△△区3-3,xxx-xxx-xxxx
北海道,○○店,札幌市○○区2-1,xxx-xxx-xxxx


  • オチ
UNIX上のCSVの場合は次の一行でよかったりする。

$ sed -g 's/"//' 元ファイル > 先ファイル