- ベストアンサー
CGIでCSVとしてデータ保存→検索して計算後表示
- CGI初心者が困っている 入出金帳簿のWeb実現方法
- CSVファイルのダウンロードとExcelでの計算方法がわからない
- 金額の合計の求め方やソースコードの書き方が不明
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
済みません、スクリプトを良く見ないでコメントしてしまいました。 このスクリプトが全てではなく、@NEWがどのようにcsvとかブラウザーに表示するのかが分らないのですが。 push(@NEW,$data2); の @NEWに入れ込んでいるので、 else { push(@NEW,$data2); $hit++; } } の下に、 $goukei = ",,,$nkin,$skin,"; または、 $goukei = "$nkin,$skin"; と記して、 push(@NEW,$goukei); ではどうでしょうか。 またテストとして、push(@NEW,$goukei); の下に、 $test = join("\n", @NEW); &error('エラー',"$test"); の2行を追記して、アクセスすると、エラー表示のところにズラズラ出て最後に合計金額とかがでていませんか? 出ていてもいなくても、あとでこの2行を削除してください。 教えて頂いたhtmlのソースの方は、@BASE = ; と記述ミスがありました。@BASE = <IN>; だと思います。
その他の回答 (3)
- Suzi
- ベストアンサー率38% (130/334)
「foreach $num ($FF .. $#BASE) {」の上に、 $skin = $nkin = '0'; と記して、 「# 摘要(一致)」の下に、 $nkin += $inmoney; $skin += $outmoney; と記します。 else { push(@NEW,$data2); $hit++; } } の下に、 print "入金:$nkin<br>"; print "出金:$skin<br>"; で表示されると思います。
補足
やっぱり500エラーが出てしまいます。。。 何度もいろんなやり方をしたのですが。。。 合計を求めないと正常に動いてくれるCGIですので。。。 ソースを張ります。 間違えてませんよね?? 何度もすみません。 http://www.jin.ne.jp/gioia/serchcgi_testpage/index.html
- anotherone
- ベストアンサー率54% (35/64)
http://www.google.co.jp/search?hl=ja&q=javascript%E3%80%80%E5%90%88%E8%A8%88&lr= http://www.google.co.jp/search?num=50&hl=ja&q=javascript%E3%80%80%E5%8D%B0%E5%88%B7&lr= cgiでも同じ形で処理できます
補足
すいません(^^; せっかくお返事をいただいたのですが、CSVファイルから値を引っ張って合計する方法がわかりませんでした(^^;
- Suzi
- ベストアンサー率38% (130/334)
>>日付とか摘要で検索できて表示まではできるようになりました。 この表示の時には、foreachやwhileを使い、入金額や集金額の変数もループされると思います。 foreachやwhileの前に、$sum_nyukin = '0'; $sum_shukkin = '0'; と記して、 ループの中に、$sum_nyukin += 入金変数;、$sum_shukkin += 出金変数; を記します。 ループが終わった後に、 print "入金総計:$sum_nyukin <br>"; print "出金総計:$sum_shukkin"; とかで表示されると思います。 serch.cgiは知りませんので、あくまで想像にて失礼いたします。
補足
ご説明ありがとうございます。。。 早速やってみましたが、500エラーが出てきました(^^; serch.cgiはレスキューさんのデータベースCGIを参考にしてますので。。。 ここに書いてもいいのでしょうか?? printの表示部分は意味がわかるんですが・・・ ************************************************************ ■入力 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } if ($buffer eq "") { &error('エラー','使い方が間違っています.'); } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $name2 = $name; $value2 = $value; $FORM2{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'euc'); $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\n//g; $value =~ s/\r//g; $value =~ s/\t//g; $value =~ s/\,//g; #フォーム変数へ $FORM{$name} = $value; } #■検索処理 if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); } @BASE = <IN>; close(IN); if ($FORM{'FF'} eq '') { $FF = 0; } else { $FF = $FORM{'FF'}; } $TO = $FF + $page - 1; if ($TO > $#BASE) { $TO = $#BASE; } $hit = 0; $next_num = ''; foreach $num ($FF .. $#BASE) { $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc'); ($m,$d,$tekiyou,$inmoney,$outmoney,$bikou) = split(/\,/,$data); # 摘要(一致) if ($FORM{'tekiyou'} ne 'all') { if ($tekiyou eq $FORM{'tekiyou'}) { ; } else { next; } } # 検索終了処理 if ($hit == $page) { $next_num = $num; last; } else { push(@NEW,$data2); $hit++; } }
お礼
すみません。いろいろ親切に教えていただきましたが、 500サーバーエラーがずぅ~っと出てきて結局断念しました。。。 初心者でご迷惑をおかけいたしました。。。 ありがとうございました。