こんにちわ!NAKANOです。
タイトルの事なのですが、検索エンジンで調べて
殆ど回答らしき事はかいてあるのですが、解らない
事が結構あるので掲載させて頂きます。
まず環境は数行あるCSVのデータから一部の行だけを
引っ張ってテーブルに流す方法までは行き着きました。
で、そのテーブル表示させた値はさまざまで項目毎に
「<TD>」で分けております。一番右端が数字なのですが、
これに「3桁毎のカンマ」を付けたいのですが、色んな
サイトで紹介されている手法を参考にやってみたのですが
どうにも上手くいかなくて…(汗)
それでここに質問させて頂いた次第で御座います。
最終的に『1,234,567,890』って感じになれたらな~
って思っています。
宜しくおねがいいたします。
No.4ベストアンサー
- 回答日時:
入力ファイルが
テスト1,テスト2,テスト3,テスト4,123456789.01
とした場合ですと
open(DATA, "test.csv");
while(<DATA>) {
s/[\r\n]*$//;
@cols = split(/,/);
foreach $col (@cols) {
$col =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g; # ここでカンマクギリ(BLUEPIXY様の小数点対応版をしよう)
print "[$col]";
}
print "\n";
}
close(DATA);
とすればいいかとおもいますが?
もしかしてですが
テスト1,テスト2,テスト3,テスト4,123,456,789.01
こうなってるとか?
だとしたら、項目数がわかってることが前提になりますが、
open(DATA, "test.csv");
while(<DATA>) {
s/[\r\n]*$//;
@cols = split(/,/, $_, 5); # ','で5個まで分けてそれ以降は分けない
foreach $col (@cols) {
print "[$col]";
}
print "\n";
}
close(DATA);
とすればいいのでは?
tokebi 様。お世話になっております。
戴いたソースをそのまま使ってみると上手くいくのは
確認できます。私が作ったCGIにもいくつかは適用
出来ました。何となくは理解できたのですが、データ
をテーブルに流して表示させている場合はやはり出来
なかったです…
でも3桁毎にカンマを入れる手法の質問としては解決
なのでここは一旦閉じさせて戴きます。
大変参考になりました。本当にありがとう御座います。
No.5
- 回答日時:
>扱い方がわかりませんでした
,区切りのフィールドを切り出したあと、
$colに数値が入っているのが判っているとしたら
$col=commify($col);
とすれば、$colにカンマ区切りの文字列が入ります。
sub commify {
…
}
の部分は、どこか邪魔にならない場所(スクリプトの最後とか)にでも置いておけばいいです。
BLUEPIXY 様。お世話になっております。
おかげ様で仕組みは何となく分かったのですが、
下で返答した様にテーブルがどうも…
また改めて質問はさせていただこうかと思います。
取り合えず一旦は解決ということで閉じます。
本当に何度もありがとう御座いました。
No.3
- 回答日時:
1 while $text =~ s/(.*\d)(\d\d\d)/$1,$2/;
とか?
この回答への補足
ここで追記の質問をします。
CSVを読んでテーブルに流す仕組みのCGIファイルを
Perlで作ったのですが、このCGIファイルに組込む
んですよね?Perlファイルで作っても上手くいきませ
んでした。ひょっとしてCSVでは出来ない?のかなぁ…
私が使っているソースは以下のものが基本形になっています。
open(DATA, "test.csv");
while(<DATA>) {
s/[\r\n]*$//;
@cols = split(/,/);
foreach $col (@cols) {
print "[$col]";}
print "\n";}
close(DATA);
因みに『split(/,/);』を使わなければ3桁ごとにカンマ
は入るようです。
何かご教授いただければ・・・・お願い致します。
Tacosan 様。お返事ありがとう御座います。
先にお返事いただきました方のと同様、扱いがわかりませんでした。すいません・・・
No.2
- 回答日時:
クックブックに載っていたものを転載しておきます
$num=1234567.89;
$commaNum=commify($num);
print "$commaNum\n";
sub commify { #クックブック 2.16(P103)
my $text = reverse $_[0];
$text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
return scalar reverse $text;
}
基本的なアイデアは逆にしてから3桁ずつ区切って、カンマを挿入して、また逆にして戻す、のが簡単です。
上記の方法では小数点にも対応しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- 建築士 建築士製図試験での縦距離の数値の書き方を教えて下さい 3 2023/07/16 11:36
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) Access VBAから使用したExcelプロセスを閉じる方法について 4 2022/06/08 17:50
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サーバーのテキストファイルを...
-
HTMLからCGIへデータを引き継ぎ
-
jcode.pl 使い方
-
表示を一覧表形式にしたいので...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
[HTML]プルダウンメニューの横...
-
INPUT TYPE
-
別formのhidden項目を自form値...
-
javascript ColorBoxの最大縦幅...
-
携帯用アンケートページを作成...
-
フォントサイズを変えるには?
-
PHPのlocationについて
-
onMouseoverで下線表示したい(...
-
Error: No Recipient というエ...
-
チェックボックスグループの一...
-
複数ボタンのvalueを送れない
-
WEBアプリケーションからフォル...
-
シングルコーテーション(')と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーバーのテキストファイルを...
-
XML::Simpleの使い方について
-
perl の grepで 全角カタカナで...
-
IIS の@INC ERRORについて教えて
-
Mechanizeにおけるボタンクリッ...
-
標準入力からデータが読込めない
-
フォームメール確認用ページ
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
-
WEBページを強制的に横画面で見...
-
[HTML]プルダウンメニューの横...
-
VB.net データーグリッドビュー...
-
別formのhidden項目を自form値...
-
FORMのselectの選択肢を最初か...
-
VB初心者。小数点以下の表示で...
-
EXCELとの連携
おすすめ情報