• ベストアンサー

カンマを,以外で表現したい

実際にはCGIやPerlではなくHTMLの技術だと思いますがPerlがらみのことなのでこちらで質問させて頂きます。 PerlでCSVファイルを扱っているのですが、データの中にカンマ(,)が入るとそこで分割されて取り扱われるので、何か他のものに置き換えたいと思っています。 ですが勝手に自分で決めたものだと、表示する際に置き換えたデータを元に戻さないといけないし、万一自分が決めた形と同じ形のデータが存在すると表示するときに置き換えたデータをカンマに戻すとそのデータまで置き換わってしまうので、きちんとしたコードがないものかと思っているのですが、カンマのタグというものはないのでしょうか。 つまりは、半角スペースなら と置き換えられると思いますが、このようなコードで書き換えることはできないのでしょうか。 例) 「123,123」というデータを登録するのに分割されるのを防ぐために「,」を「、」に置き換えると、表示する際に再度置換する必要がある上、同一データ内に「私は、○○です。」があるとその「、」まで「,」に変換されてしまうのでそれを防ぎたいし、できれば表示する際置換しなくていいものがあれば。 PS 専門用語が分らないのでうまく説明できなくてすみません。

  • choei
  • お礼率63% (286/451)
  • CGI
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.4

perl で CSV を扱う一般論はさておき、CSVの内容をHTMLに埋め込むのが目的の場合には良い方法があります。 データ中の「,」 を , の5文字に変換してください。 HTML中の , という表示文字は、ブラウザが「,」を表示してくれます。 # No.1 さんはこの事をおっしゃってるんでしょう。 余談ですが、CSVをあなたの作ったプログラムのみでアクセスするならそれだけで良いです。 しかし、Excelで書き出した CSV を読むとか作ったCSVをExcelで読ませるとかが必要なら、他にも注意事項が沢山ありますよ。

choei
質問者

お礼

ズバリそのものの回答ありがとうございます。 さっそくやってみます。 ところで、余談ですが、注意事項ぜひお聞かせください!

その他の回答 (4)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.5

> 注意事項ぜひお聞かせください! CSV文法の基本規則は特にむづかしくありません。 http://www.kasai.fm/wiki/rfc4180jp セルデータ中に 「,(カンマ)」、「"」、改行のいずれかを含む時は、セルデータ全体を「"」で囲む。 セルデータ中の「"」は「""(2個連続の")」に変換する。 それだけ守れば最低限の役には立ちます。 しかし、MS-Excel と CSV データを交換するにはもうちょっと工夫が必要です。 私も一部しか知りませんが、例えば 1 文字コードは Windows-31J (CodePage932 の事) 2 書き込み処理では改行コードは全て CRLF。 読込処理では、LF と CRLF の混在に耐えられる様に。 (あるバージョンの MS-Excel は、行区切りに CRLF を、セル内改行に LF を使います) 3 MS-Excel の「自動形式認識」は多くの場合有害。 例えば「1/2」というセルを持つCSVをMS-Excelで入力すると「1月2日」に化けたりします。 これを避ける為に強制的に文字列解釈させる方法はMS-Excelのバージョンで違っていて、Excel2003 の場合には「"=""1/2"""」 と書きます。 4 MS-Excel のCSV入力は、規則違反でもそこそこ面倒を見てくれます。 しかしそれでOKと思わずに規則は守りましょう。 以上、言葉で説明するのはまだ良いんですが、完全対応の入力処理を書くのは少々ムズいです。

choei
質問者

お礼

追加のご教授ありがとうございました。 少しずつ勉強します。

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.3

CSVファイルの場合は、一般的にデータの中にカンマが入っている場合はそのデータを”(ダブルコーテーション)で括ります。エクセルでセルの中に 2,3 と入れてCSVファイルで出力してみてください。

choei
質問者

お礼

ありがとうございます。 "でくくって、表示させる際は"を除外するという方法でしょうか。

  • MOMON12345
  • ベストアンサー率32% (1125/3490)
回答No.2

デリミタをカンマ以外に変更する方法もありますし、カンマを他の文字列に変更してしまう方法もあります。 a$ =~ s/\,/<------>/; これでカンマが<------>に変換されますよね。 カンマに戻したいときには又逆に変換すればいいと思います。 <------>が使われる可能性があるのなら<<<---1234---5678---<<<000>>>とかでも良いと思います。

choei
質問者

お礼

ありがとうございます。 一般的な文字列への変換は使われる可能性があるので避けたいです。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

ヒント:1  ",".charCodeAt(0) ヒント:2  実態参照は数値してい可能

choei
質問者

補足

すみません。 わかりません。

関連するQ&A

  • csvファイルでの,(カンマ)の取扱について

    csvファイルをperlで取扱っています。 ,(カンマ)が含まれるデータは""で括ってやれば行がずれることなく入るのは分かっているのですが、今度は取り出すときどのようにしていいのか分かりません。 各行毎に一連のデータが羅列されていますが、それの分割方法を教えてください。 たとえば、 $bに,(カンマ)入りの文字列が入っていた場合、 ($a, $b, $c) = split(/,/, $query); とすると本来$bに入って欲しいデータの,(カンマ)から後の部分が$cに格納されてしまいます。(そこから先が1つずれます) これをずれずに分割させるにはどのようにしたらいいでしょうか? ちなみに ($a, "$b", $c) = split(/,/, $query); と試しにやってみましたが、エラーになってしまいました。 実は長年の悩みで、データを格納する際に,(カンマ)を別のあり得ないような文字列に置き換えて、取り出したあと,(カンマ)に戻すというやり方でやっていたのですが、1つのデータファイルを複数のperlで取扱うようになり、対応が難しくなってきたので、これを機にきちんとした方法でデータを取扱いたいと思っています。

    • ベストアンサー
    • Perl
  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

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

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

  • perlでcsvファイルを読む(ダブルコーテーション内カンマを無視したい)

    perlでCSVファイルを読み込むスクリプトを作っています。 以下のようなCSVファイルがあります。 ■CSVファイル 東京,よろしくお願いします。 大阪,はじめまして 九州,"5,000円でお願いします" カンマで区切り、以下のようにすると、"5,000円"の部分が2つに分かれてしまいます。 ($data1,$data2) = split(/,/,$all_data) 前後にダブルコーテーションがあった場合、中のカンマで区切らないような良い方法はないでしょうか? 環境: Perl 5.8.5

    • ベストアンサー
    • Perl
  • エクセル:桁区切り「カンマ」でセルが分割されて貼り付けされてしまう

    仕事で社内のシステムから売上の情報をコピーしてエクセルに貼り付けて処理をしようとしたところ、コピーした数字に「桁区切りのカンマ","」がある関係で、 たとえば 1,234,567 という数字が 1 と 234 と 567 とセルが分割されて貼り付けられてしまいます。 CSVファイルのカンマ区切りデータと同じように情報がカンマで分割されてしまっているようなのですが、貼り付けの際に分割されないようにするにはどうしたらよいでしょうか? ちなみに、これらデータはスペースで区切られているので一度テキストファイルに保存して、CSVを開くときの区切り文字の設定を「スペース」に設定すればうまく開くのはわかるのですが、コピーして即貼り付けのときにこのようになることを回避する方法はあるのでしょうか?マクロを組んでも構いません。 どうぞ、ご教授、宜しくお願いします。

  • ACCESSで、コンマを付けてCSVをエクスポートしたい

    ACCESSで、数字のデータに、コンマを付けてCSVをエクスポートしたいのですが・・・ 表示ではコンマが付いていても、エクスポートするとコンマが付きません。 何か方法はないでしょうか?

  • カンマ区切りのCSVについて

    ブログの引越しの依頼を受け、元データ(CSV)をもとに 出力ページを作成しているのですが、 003,あああ,一昨日は晴れていました。,そうでしたね,2009/06/03 002,bbbbbb,昨日は晴れです。,そうですか,2009/06/02 001,aaaaaa,今日は晴れです。,そうですね,2009/06/01    ・    ・    ・ という内容のカンマ区切りのhoge.csvがあります。 (id,title,text,coment,day) これを $array=file(hoge.csv); for($i=0;$i<count($array);$i++){ $data=expolde(",",$array[$i]); ehco $data[2]; } としてカンマで分割し、それぞれのデータを整形したいのですが、 所々text部分($data[2])の内容が 「今日は,晴れです。<br />とても,気持ちが良いです。」 など「,」を使用していて、当然ですが   $data[2]を出力したら⇒「今日は」   $data[3]を出力したら⇒「晴れです。<br />とても」 となってしまいます。  ●元のCSVはいじれない。(データ量が多いため編集不可能)  ●前後($data[1]=title/$data[3]=coment)も決まった形ではない。(正規表現で抜き出せない)  ●SQLは使えない。 こういう場合どのような解決策があるでしょうか?

    • 締切済み
    • PHP
  • ACCESS カンマをスペースに置き換えるマクロ(初心者です) 

    ACCESSで作業をし、EXCELにエクスポートしてCSVで配信しています。 CSVに落とす際には必ずカンマ区切りで次の列として認識させたいのですが、 商品の型名などの中には,カンマが含まれている場合があり、CSVに落とす際に 列ずれを起こしてしまいます。 私だけが使用するのであれば、検索置換で毎回確認すればいいのですが、 私以上の初心者の人もこのDBを使用して作業するので、ボタンをクリック するだけで出来るような物にしたいのです。 初心者の為、質問内容がわかりにくいと思いますがご回答よろしくお願いいたします。

  • データをカンマで区切る・・・

    do { echo $row['name'].", "; } while ($row = mysql_fetch_assoc($res)); このようにして、Mysqlから取り出したデータを表示する際に カンマで区切って表示したいのですが、 このままだとデータが最後のときにもカンマを打ってしまいます。 データが最後の場合はカンマを打たないようにするにはどうすればよいのでしょうか? (データを取り出す段階でGROUP_CONCATするというのはなしでお願いします)

    • ベストアンサー
    • PHP
  • ExcelのVBAでCSVを読み込むと通貨になる

    Excel2010のVBAでCSVファイルを読み込んで処理させたいのですが、読み込んだデータをExcelが勝手に別のデータに変えてしまうので困っています。 例えば、123,456というデータは、フィールドにカンマがあるので、CSVでは"123,456"となりますが、これを以下のようなVBAのコードで読み込ませると、書式が通貨として扱われてしまって、データも123456になってしまいます。文字列として読み込まれていれば正しいデータとして読み込まれるように思うのですが、文字列として読み込ませる方法が分かりません。正しく元のデータ123,456のまま読み込ませるにはどうすればいいのでしょうか。 なお、CSVの各フィールドにカンマやダブルクォーテーションが混在していると、各フィールドに分割する処理が複雑でよく分からないので、下記のコードのようにExcelの機能でCSVを各フィールドに分割される方法で読み込ませたいです。 よろしくお願いします。 Workbooks.Open Filename:= "file.csv"