• ベストアンサー

CSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか? 具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。 全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。 例えば、特殊文字などで対応可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#86752
noname#86752
回答No.2

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。 1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。 2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です) 難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。 例えば、データ中のカンマは\,にするとか。 データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

mela2
質問者

お礼

今回はcrumさんが教えてくれた、2.のタブ、もしくは3.の特殊文字列でやってみようと思います。 いろいろな案、ありがとうございました。

mela2
質問者

補足

追加質問になってしまいますが、もしよろしければ教えてください。 カンマやタブ以外の区切り文字、と言ったときに、 \, は結構メジャーなんですか? \ は半角のバックスラッシュですよね? 半角の円マークと同じですか?

その他の回答 (3)

noname#86752
noname#86752
回答No.4

#2で回答したものです。 >カンマやタブ以外の区切り文字、と言ったときに、 \, は結構メジャーなんですか? \,は適当です。Unixのエスケープシーケンスっぽく書いてみました。 >\ は半角のバックスラッシュですよね? 半角の円マークと同じですか? 日本語環境だと円マーク、英語環境だとバックスラッシュですね。 おそらくWindowsに慣れている方だと#3さんの回答の""で囲む方法が見慣れたものなのではないかと思います。 (Excelとかも勝手にそういうデータを作ってくれるかもしれません) Unix系だと\を対象の文字の前につけることで、特殊文字を普通の文字として扱うという処理に慣れていると思います。

回答No.3

CSVは「データがカンマで区切られている」以外のルールは、好き勝手に決めているみたいな感じですね。 Excelの場合、カンマ入りの文字列は、"(ダブルクォーテーション)でくくっています。じゃダブルクォーテーションはどうするのかというと、""(2つ並べる)になります。改行コードも文字列の中に入れてしまうので、データを受けた側は改行で1レコードと決めるわけにもいきません。。。 全角カンマで渡して、受ける側で数字の間にある全角カンマを半角に変換するというのもいい手だと思いますよ。 どうやるにしても、受け渡しの渡される方で対応できるようにしてやらないとだめですね。

mela2
質問者

お礼

全角カンマを後ほど半角に変換、というのも一手ですね。(ふむふむ) 半角カンマでどうしても区切る、ということになったら、この手を使わせていただきたいと思います。 ありがとうございました。

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

例えば 商品,価格,数量,コメント ノート,150,10,これは1,500円でした。 の場合 "ノート",150,10,"これは1,500円でした。" とすれば、最後のコメントはカンマも文字列として 扱われます。 ただし、相手側のプログラムが、これに対応している 必要があります。 Excelなどでは問題なく開けますし、Accessにインポート する場合も問題ありません。 問題は、クォート=文字列と判断していないような自前の プログラムを使用している場合です。 MS系のプログラム以外では、不可と考えた方がよいでしょう。 いずれにせよ、うまく行くかどうかの確認は必要です。

mela2
質問者

お礼

すばやい回答、ありがとうございました。 Excelの場合(およびマイクロソフト系列の場合)はこの方法も使わせていただきます。

関連するQ&A