CSVファイルの項目にコンマ、ダブルクォーテーションを記述 | スコヤカ錬金術

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つでダブルクォーテーション(文字扱い)とする」仕様がある。「""」と書けば「"」として文字扱いしてくれる。つまりエスケープ文字だ。


これで文字にダブルクォーテーションがあったら「""」の状態に置換され、めでたく文字扱いとなる。