CSVファイルの項目にコンマ、ダブルクォーテーションを記述
ヽ(゜▽、゜)ノCSVファイルは項目を","(コンマ)で区切った汎用性に富んだファイル形式。
使うだけなら問題ないが、プログラムからCSVを生成したりする場合に困るのは、「一項目の文字列内に「,」(コンマ)、「"」(ダブルクォーテーション)が混じっている場合」だ。
一項目内にコンマが混在した場合、CSVファイルはその「文字」を「区切り」と判断してしまうので、例えば「ナイス,ガイ」という文字列は「ナイス」と「ガイ」とういう別の項目と扱われてしまう。
この解決案は結構簡単。
CSVファイルは記述の仕方として、
「○○○,○○○,○○○」と記述するやり方のほかに
「"○○○","○○○","○○○"」と、一項目をダブルクォーテーションで囲う記述のやり方もあるので、こうしてやれば文字列内にコンマが混じっていても平気。
が、問題はこれだけでは留まらない。次に問題になるのは「文字列にダブルクォーテーションも混じっている場合」だ。
こちらの解決方としては、一般的に「ダブルクォーテーションをエスケープする」だろう。今回はVBScriptの記述でやってみた。CSVのこの手の問題はVBScriptに限ったことではないので、考え方自体は他言語でも使えるはず。ヽ(゜▽、゜)ノ
--------------------------------------------------------
Dim setVal
setVal = "(ダブルクォーテーションを含む忌まわしい文字列)"
If Not (setVal = "") Then
setVal = Replace(setVal,Chr(34),Chr(34) & Chr(34))
End If
--------------------------------------------------------
前振り長かったが、
簡単に言うとReplace機能を使うだけだ!( ̄▽+ ̄*)
1個目の引数が置換対象の文字列。
2個目の引数のChr(34)というのはダブルクォーテーションの文字コードを返す関数。
つまりダブルクォーテーションのこと。
3個目の引数が置換後の文字列。Chr(34)を&で二個連結させている。
ポイントは3個目の引数。
CSVファイルの仕様の一つに、「ダブルクォーテーション2つでダブルクォーテーション(文字扱い)とする」仕様がある。「""」と書けば「"」として文字扱いしてくれる。つまりエスケープ文字だ。
これで文字にダブルクォーテーションがあったら「""」の状態に置換され、めでたく文字扱いとなる。