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 RegExpWith objRegexp.Pattern ="""([^""]+)""".Global=TrueEnd WithDo Until objTxIn.AtEndOfStream =TruetxTmp = objTxIn.ReadLine()Set Matches = objRegexp.Execute(txTmp)txOut = txTmpFor Each Match in MatchestxOut = objRegexp.Replace(txTmp, "$1")' txOut = Replace(txOut, ",",",'")NextobjTxOut.WriteLine(txOut)LoopobjTxOut.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/"//' 元ファイル > 先ファイル