![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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ランキング
-
スクリプト用のヘッダー?
-
socketを使って外部のファイル...
-
伝言掲示板の作成(超初心者です)
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
FORMのselectの選択肢を最初か...
-
WEBページを強制的に横画面で見...
-
「value」に2つの値をセットす...
-
グーグルの検索窓を自分のHP...
-
ローカルテストサーバーと本番...
-
EXCELとの連携
-
MSPゴシックで、一番幅を取る文字
-
メールフォームのプルダウンメ...
-
Error: No Recipient というエ...
-
チェックボックスの返す値
-
ディレクトリのファイル数取得
-
perlがうごきません
-
CGIでチェックボックスを使...
-
ブックマークからのアクセスを...
-
VB.net データーグリッドビュー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアップロードができ...
-
CGI経由でのPDFファイルをダウ...
-
選択式アンケート項目合計点で...
-
2つのドメイン、同じサーバー。...
-
クオートの多重入れ子をするには?
-
<FORM TYPE="subumit">でデータ...
-
普通のHTMLの画面からCG...
-
クッキーを使って投票欄に名前...
-
perlで重複データを集計
-
cgi+htmlテンプレート使用
-
ひとつのCGIファイルに複数のペ...
-
htmlからパラメータで、cgiに渡...
-
CGI掲示板のSendmail送信について
-
perl/cgi リダイレクトができない
-
ホームページビルダーで作ったh...
-
cgiでのprint関数
-
パスワード認証のCGI
-
sendmailを使って宛て...
-
フォントサイズを変えるには?
-
Perlのファイルのアップロード...
おすすめ情報