CGI-BBS > データベース > 簡易データベース > 価格の数字にカンマを表示したい


カレッヂ
カレッヂ


質問者 初心者  投稿日 2/15(木) 08:45:21
検索結果に表示されたデータの中に、価格欄がありまして、その数字をカンマ入りで表示したいと思いますが、何か方法がありませんか。csvファイルのデータにカンマを入れたままでFTPしたら検出されたデータがおかしくなってしまいました。

よろしくお願いします。
回答者 まさ  [削除]  投稿日 2/15(木) 14:29:56
コンマを入れるのは
1 while s/^([-+]?\d+)(\d\d\d)/$1,$2/;
これで出来ます。
質問者 初心者  [削除]  投稿日 2/16(金) 08:48:22
まささん

ご回答、ありがとうございます。

「1 while s/^([-+]?\d+)(\d\d\d)/$1,$2/;」はどちらへんに入れますか。#検索結果のところでしょうか。

すみません。よろしくお願いします。
回答者 まさ  [削除]  投稿日 2/16(金) 16:31:50
ちょっとこれじゃわかりにくいですね。
まず以下のような関数を作ります。

sub commify {

  $_ = shift;
  1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
    return $_;
}

そして呼び出したい所に以下を入れます
$data = &commify($data);

これで$dataがコンマ付き数字に変わります。  
質問者 初心者  [削除]  投稿日 2/19(月) 18:16:57
まささん

ご丁寧に教えてくださってありがとうございます。

そのままコピーしてプログラムに入れてみたら内部サーバエラーになってしまいました。勉強不足で原因がわからないんです。

申し訳ありませんが、ご教示いただけませんでしょうか。
回答者 しあわせのツボ  [削除]  投稿日 2/19(月) 19:17:10
インデントに全角スペースを使っているようですね。そのままコピーしたのならエラーが出ます。
全角スペースを取り除くか、何か別のキャラクタ(タブや半角スペースなど)に置き換えてみて下さい。
回答者 まさ  [削除]  投稿日 2/19(月) 19:23:02
これはどうも失礼しました。
たしかに全角スペース使ってますね。気付きませんでした。
的確なご指摘ありがとうございました。
質問者 初心者  [削除]  投稿日 2/20(火) 08:22:28
しあわせのツボさん、まささん

お世話になっています。ありがとうございます。

インデントの全角スペースをどうやって取り除くか、具体的な方法を教えてくださいませんか。恥ずかしいですが、実は、インデントの全角スペースって、全然分からないんです。

よろしくお願いいたします。
回答者 羊相談員  [削除]  投稿日 2/20(火) 10:30:49
自分で全角スペースの部分を半角に書き直すだけです。-
回答者 しあわせのツボ  [削除]  投稿日 2/20(火) 11:44:02
語句が通じませんでしたか。失礼しました。
インデントとは字下げのことです。しなくても動作しますが、コードを読みやすくするために一定の規則でインデントするのが通例です。
まささんご提供のコードを見ると、
sub commify {

■ ■ $_ = shift;
■ ■ 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
^^^^return $_;
}
と、■の所に全角スペース、^の所に半角スペースがあります。
スクリプト中の"文字列"でない所に全角スペースがあるとエラーになるので、これを取り除いて下さい。
半角スペースやタブに変えてインデントを維持することをお勧めしますが、単純に削除しても構いません。おお好みでどうぞ。
回答者 まさ  [削除]  投稿日 2/20(火) 11:55:23
sub commify {

     $_ = shift;
     1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
     return $_;
}

これをCopy&Pastすればいいです。
全角スペース取り除きました。
質問者 初心者  [削除]  投稿日 2/20(火) 15:24:53
しあわせのツボさん、まささん

ご親切にしてくださってありがとうございます。

何回も無知の質問をして恐縮ですが、スクリプトは作動するようになりましたが、検索の結果に表示された数字はカンマのところで、次のように2列に分かれてしまいました。

"3 456" (3,456)

「$data = &commify($data);」を「#■検索結果」内に入れました。場所が間違っているのでしょうか。
回答者 まさ  [削除]  投稿日 2/20(火) 16:14:04
これってデリミタにコンマを使っていませんか?
スクリプトを見ていないのではっきりしたことは言えませんが。

もしコンマを使っているようならば、コンマ表示は難しいですね。
データを全て書き換えるのならいいですが、データが多いと手動では難しいです。

はっきりしたことが言えませんので、詳しいことはそのスクリプトを知ってる人に。
回答者 羊相談員  [削除]  投稿日 2/20(火) 20:37:55
例えば
($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data);

↑の処理の後に
$AGE = &commify($AGE);
と記述すると$AGEにカンマが付いて表示されます。
(普通は年齢にカンマなんか付けませんがあくまでも例です。)
$NAME = &commify($NAME);
の場合は$NAMEにカンマが付いて表示されます。
(あくまでも例です)


($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data);
の前に
$data = &commify($data);
と記述すると
$dataをカンマで区切る前に価格にカンマを付けてしまうので
誤動作の恐れがあります。
質問者 初心者  [削除]  投稿日 2/21(水) 07:42:53
まささん、羊相談員さん、しあわせのツボさん

おはようございます。

皆さんのおかげで、うまくいきました!本当に嬉しいで〜す。(笑)

皆さんに教えていただいてとてもいい勉強になりましました。ご親切を心から深く感謝しています。

いろいろとお世話になりました。

今後ともよろしくお願いします。

このページは終了したので返信(回答)は書きこめません

Web裏技