![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.2ベストアンサー
- 回答日時:
CSVというのはCSVファイルと予想しますが、ファイルからとフォームからでそんなに違わないと思うのですが。
ファイルは簡単に行ごとにわかれた配列として読み込むことができますよね。
フォームからデータを受け取って、行ごとの配列にするのもsplitを使えば簡単でしょう。
そうすると、行ごとの配列を受け取って集計するサブルーチンを作ればどちらにも使えると思いませんか?
あとは#1さんのおっしゃるとおりやると良いでしょう。
連想配列だけでやると整列して出てこないので、ちょっと工夫が必要です。
というわけで、ちょっと書いてみました。
use strict;
sub aggregate {
my $csvp = shift;
my @csv = @$csvp;
my %subtotal;
my @order;
foreach (@csv) {
chomp;
my ($id, $num) = split(/,/);
if (!exists $subtotal{$id}) {
push(@order, $id);
}
$subtotal{$id} += $num;
}
my $ret = "";
foreach my $key (@order) {
my $value = $subtotal{$key};
$ret .= "$key,$value\n";
}
return $ret;
}
use CGI;
my $q = new CGI;
my $csv = $q->param('csv');
if ($csv) {
my @csv_array = split('\n', $csv);
print $q->header('text/plain');
print &aggregate(\@csv_array);
} else {
print $q->header;
print $q->start_html;
print $q->start_form(-action=>$q->url, -method=>'post');
print $q->textarea(-name=>'csv');
print $q->submit;
print $q->end_form;
print $q->end_html;
}
まず、まじめにCSVを解釈するつもりがなかったのでCSVの値には英数字しか来ないと持っています。本気でCSVを解釈するなら、"の取り扱いを真面目にやる必要があるでしょう。あるいは、Text::CSVなどのモジュールを使ったほうが良いかもしれません。
ちなみに、このプログラムでは入力で出てきた順序を保って出力するようにしています。
例えば、
a,1
c,2
b,3
c,3
と入力すると、
a,1
c,5
b,3
と出します。
先に述べたように、aggregateサブルーチンに与えるデータは行ごとに分けて配列に入れたものであれば良いので、ファイルの場合はもっと単純なコードで使うことができます。
open(my $f, "example.csv");
my @c = <$f>;
close($f);
print &aggregate(\@c);
実際に使う場合はtext/plainでの出力ではなくpreあたりで出力して、下にフォームを表示するくらいしないと不便だと思いますが、そこは自分でやってみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) VBA エラーの件 4 2022/10/10 19:14
- Excel(エクセル) Excel Powerクエリーの質問、行数指定は可能でしょうか? 2 2022/08/22 12:54
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Visual Basic(VBA) 日付を重複させずに数えたい 4 2022/12/04 16:26
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- CAD・DTP JWW-CADでDXF変換後の線が連動して消える 2 2023/01/13 11:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームを再送信しますか?
-
太鼓
-
htmlからcgiを自動的に起動させ...
-
CGI.pmはもう古い!?
-
CGIって何ですか?簡潔に教えて...
-
ホームページでCGIのフォームを...
-
エクセルで集計したい。
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
-
ホームページの事でおしえてく...
-
さくらサーバーにcgiフォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアップロードができ...
-
CGI経由でのPDFファイルをダウ...
-
選択式アンケート項目合計点で...
-
2つのドメイン、同じサーバー。...
-
普通のHTMLの画面からCG...
-
<FORM TYPE="subumit">でデータ...
-
perlで重複データを集計
-
クッキーを使って投票欄に名前...
-
cgi+htmlテンプレート使用
-
ひとつのCGIファイルに複数のペ...
-
クオートの多重入れ子をするには?
-
perl/cgi リダイレクトができない
-
CGI掲示板のSendmail送信について
-
htmlからパラメータで、cgiに渡...
-
cgiでのprint関数
-
ホームページビルダーで作ったh...
-
伝言掲示板の作成(超初心者です)
-
フォントサイズを変えるには?
-
DBの更新について困っています
-
パスワード認証のCGI
おすすめ情報