CGIでCSVとしてデータ保存→検索して計算後表示

このQ&Aのポイント
  • CGI初心者が困っている 入出金帳簿のWeb実現方法
  • CSVファイルのダウンロードとExcelでの計算方法がわからない
  • 金額の合計の求め方やソースコードの書き方が不明
回答を見る
  • ベストアンサー

CGIでCSVとしてデータ保存→検索して計算後表示

CGI初心者で大変困っています。。。 現在、CGIで入出金帳簿をつけるようにしています。 フォームで入力してCSVに保存する所まで完成しました。 そこから、FTPでCSVファイルをダウンロードして、CSVを開いて、ExcelとしてSUMとかで縦を足したり、エクセルのオートフォーム等で、科目別に並べ替えたりしています。。。。 これをWeb上で実現し、最後は印刷までしたいのですが。。。 内容は「日付」「摘要」「入金額」「出金額」「備考」です。 serch.cgiを作成して、日付とか摘要で検索できて表示まではできるようになりました。 しかし、金額の合計の求め方やどこにソースを書けばいいのか? まったくわかりません。 どうすれば可能でしょうか? いろんなサイトを見てもわかりませんでした。。。

  • CGI
  • 回答数4
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.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>; だと思います。

bicology3196
質問者

お礼

すみません。いろいろ親切に教えていただきましたが、 500サーバーエラーがずぅ~っと出てきて結局断念しました。。。 初心者でご迷惑をおかけいたしました。。。 ありがとうございました。

その他の回答 (3)

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

「foreach $num ($FF .. $#BASE) {」の上に、 $skin = $nkin = '0'; と記して、 「# 摘要(一致)」の下に、 $nkin += $inmoney; $skin += $outmoney; と記します。 else { push(@NEW,$data2); $hit++; } } の下に、 print "入金:$nkin<br>"; print "出金:$skin<br>"; で表示されると思います。

bicology3196
質問者

補足

やっぱり500エラーが出てしまいます。。。 何度もいろんなやり方をしたのですが。。。 合計を求めないと正常に動いてくれるCGIですので。。。 ソースを張ります。 間違えてませんよね?? 何度もすみません。 http://www.jin.ne.jp/gioia/serchcgi_testpage/index.html

回答No.2
bicology3196
質問者

補足

すいません(^^; せっかくお返事をいただいたのですが、CSVファイルから値を引っ張って合計する方法がわかりませんでした(^^;

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

>>日付とか摘要で検索できて表示まではできるようになりました。  この表示の時には、foreachやwhileを使い、入金額や集金額の変数もループされると思います。 foreachやwhileの前に、$sum_nyukin = '0'; $sum_shukkin = '0'; と記して、  ループの中に、$sum_nyukin += 入金変数;、$sum_shukkin += 出金変数; を記します。 ループが終わった後に、  print "入金総計:$sum_nyukin <br>";  print "出金総計:$sum_shukkin";  とかで表示されると思います。 serch.cgiは知りませんので、あくまで想像にて失礼いたします。

bicology3196
質問者

補足

ご説明ありがとうございます。。。 早速やってみましたが、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/</&lt;/g; $value =~ s/>/&gt;/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++; } }

関連するQ&A

  • perlでカンマ区切り(CSV)データの集計をしたい

    perl初心者です。 個人使用の経費帳簿をCGIで携帯で打ち込むようにしています。 CGIレスキューさんの簡易データベースを改良して作成しました。 フォーム入力→カンマ区切りで保存→項目別検索まで出来ました。 (年,月,日,摘要,入金,出金,備考)という感じです。 これに、月間項目別集計の昨日を追加したいのです。 月間検索で、12月度全部の一覧は出せるようになりました。 が、この1ヶ月間の交通費、書籍代、飲食費・・・の項目別の合計を表示させたいのですが。。。 どのようなプログラムでしょうか?

    • 締切済み
    • CGI
  • エクセルを使って金銭出納帖を作成

    エクセルを利用して金銭出納帖を作成しました。入金、出金、残高、摘要欄を作成。残高欄には、数式を入れ、入金額、出金額を入力すると、自動的に残高が出るようにしました。私は、そんな程度の出納帖でいいと思うのですが、友人から質問がありました。残高欄には数式が入っているので、ずーっと先の方(入出金未記入のところ)まで、零という数字が入ってしまっています。エクセルで作った出納帖で、先のほうまで零が入ってない帳簿があると。それって、どうやって作るのでしょう?

  • CSVファイルをCGIでダウンロード

    Perlを使ってCGIを書いています。 申し込みフォームを送信すると、CSVファイルに書き込むのとメールで送信するというCGIを作りました。 そこで、その作ったCSVファイルをFTPソフトを使うのではなく、ブラウザ上でCGIを使ってダウンロードしたいのですが、どうしたらよいのでしょう? 環境は OS:Linux、PerlのバージョンはPerl5です。

    • ベストアンサー
    • CGI
  • フォーム投入データをcsvファイルにするcgiについて

    アンケート等のフォーム投入データをcsvファイルにするcgiのフリーのひな形教えてください。私はcgiを自分で作成できないので先人の作成・公開されたものをありがたくカスタムさせていただいています。投入されたデータをメールで送信するフォームはよく見かけますが、数が多くなってくると逐次そのメールのデータをexel等のソフトに転記しなくてはならず、とても大変です。ユーザーの書き込みデータをデータファイルdat?csv?みたいなファイルにいったん書き込み、そのファイルをサーバ管理者がftpで取り出すようなものが欲しいのですが御存知の方お教え下さい。

    • 締切済み
    • CGI
  • ACCESS2010 テキストボックスに合計値を

    どなたかお助け願います。 私のPC環境は Windows7 64bit ACCESS2010  でございます。 ACCESSは苦手ながら簡単な環境を作成いたしております。 テーブル名 T_入出金    フィールド1 入出金月    フィールド2 入金業者名    フィールド3 入金額    フィールド4 出金業者名    フィールド5 出金額 クエリ Q_入金クエリ    フィールド1 入金額の合計: 入金額    集計:合計    フィールド2 入金業者名 集計:Where条件 抽出条件:Like "業者名" フィールド3 入出金日  集計:Where条件 抽出条件:Like 201401  ←日付です。 としたものを作成いたしました。 このフィールド1の合計結果をテキストボックスに表示したく、 メイン帳票フォームのヘッダー部分にテキストボックスを設置し、  コントロールソースに =[Q_クエリ]![入金額の合計] としましたが、#Name? と出てしまいます。 関数が間違っているのでしょうか・・・?

  • 家計簿やこづかい帳で返品時の記入の仕方

    家計簿とこづかい帳の中間のような記録をExcelでつけています。項目は以下の通りです。 日付 費目 摘要 入金 出金(現金) 出金(クレジット) 出金(電子マネー) 備考 先日、ドラッグストアにて風邪薬を購入しましたが、家に買い置きがたくさんあったことに気付いて返品しました。 2月2日にクレジットカードで1380円払いましたが、2月4日に返品し、現金で返してもらいました。 こういう場合、帳簿にはどう付けたらいいのでしょうか? 1.費目はどうするのか?(購入時には衛生費として付けています) 2.現金での返金を入金にプラスで書くのか、出金(現金)にマイナスで書くのか、それとも出金(クレジット)にマイナスで書くのか? アドバイスをお願い致します。

  • 条件に合うデータ検索用のCGIはありませんか?

    無料で使えるデータベース検索用のCGIを探しています。 求めている条件は以下になります。 (1)項目の編集が可能 (2)規模はそこまで多くないので、MySQLサーバ不要のもの (3)データの登録はExcel(csv)によるデータの一括登録・ダウンロード式 (4)フォームによる検索(プルダウンによるカテゴリ検索、全表示) (5)テンプレート式によるデザインの変更 (6)フォームの動的(静的ファイル出力)対応 (5)までの条件を満たすものは結構あるのですが、(6)を満たすものを探すことが出来ませんでした。 検索フォームのカテゴリ検索用のブルタウンリストへ値を反映させたいのですが、 設定ファイルへのリスト登録や、管理画面から手動での選択肢登録などではなく、 登録されているデータから値を取得、リスト化したものをフォームのプルタウンリストとして 吐き出す(支援する機能でも可)ようなものはないでしょうか? 例えば、 A、B、C項目のデータにおいて、項目Aの値が「1」「2」「3」と登録されていた場合 検索フォームのA項目検索用プルタウンのリスト選択で「1」「2」「3」を選び検索したいが、 A項目に「4」「5」「6」のデータが追加された場合に検索フォームのプルタウンのリストとして「4」「5」「6」を追加する作業を省略(簡略)化したい。

    • 締切済み
    • CGI
  • CSVが保存ダイアログでHTMLになる

    フォームの内容をCSVファイルに蓄積保存しています。 閲覧者はFTP情報をもっていないので、このCSVに対して単純にリンクを張ったHTMLを作成し、そこから右クリックでダウンロードをしていただいてます。 ところが、ローカル環境によると思うのですが、人によって挙動が違うのです。 1.リンクを左クリックすると一つなぎのテキストとしてブラウザで表示されるが、右クリックで保存するとCSVで保存できる 2.リンクを左クリックするだけでCSVでダウンロードされエクセルで開く 3.1に近いが、右クリックで保存しようとすると、CSVではなくHTMファイルとして保存しようとする 1や2は、落とせばエクセルでみれるので現状はそのままでいいと思っています。 しかし、3に関しては、利用者が「拡張子」という物を理解していただけないので、「*.htm」を「*.csv」に変更したら見れると言っても納得しくもらえません。 いろいろ調べてみて、フォルダオプションとかに行きつきましたが、1や2の挙動の人と3の挙動の人に違いは見られませんでした。 とりあえず、保存ダイアログで「*.csv」の拡張子のままで保存したいのですが、何を確認して、何を修正すればいいのか行き詰っています。 どなたか、些細な事でもいいですので教えてください。 なお、3の状況になる人の環境は  WindowsXP(SP3)  Internet Explorer8 です。 オフィスは入っていますので、フォルダオプションでCSVを確認すると、エクセルに関連付けられていました。 よろしくおねがいします。

  • エクセルの現金出納帳について

    エクセルの現金出納帳について 商店の現金出納帳をつけてましてそれをもとに1ヶ月のなかで   1から10日までの売上   11から20日までの売上   21日から末日までの売上 を集計してそれぞれのセルに集計額を出したいと思っています。 現金出納帳の入力項目は、 日付、科目、摘要、入金額、出金額、残高(自動計算)です。 その中で、科目が”売上”の入金額を10日ごとに集計したいです。 出納帳は、1ヶ月で1つのシートで作成しております。 一発で集計できる関数を教えてください。

  • WEBからCSVに書き出したデータをエクセルデータに読み込ませたい。

    私は、WEBデザイナーで、ある業者様より下記のような依頼を受けました。 ある商品のネット通販を行いたいのですが、今までオフラインでは販売もされておられ、その受注管理などは全てエクセル上にて手書きで行われておられました。 今回、オンラインショッピングを構築いたします。 オーダーは、購入の際に、1オーダーにつき、メール及びCSV形式ファイルがそれぞれ一個ずつ送られてくる仕組みなります。 ※CSV形式に書き出すのは、レンタルサーバー会社が提供しているメールフォームCGIの仕組みでおまけ機能としてついているようです。 この際、CSVで送られてきたファイルを、1ファイルずつ既存の受注管理を行っているエクセルファイルに読み込ませたいのですが、そういったことは可能なのでしょうか? (つまり、メールで送られてきたデータを、エクセルファイルに書きこもうとすると、購入者住所なら購入者住所の箇所をメールからコピーして、それをエクセルに貼り付け、購入者電話番号なら購入者電話番号のセルに貼り付け。。。。と非常に煩わしいですよね。 CSVなら、1オーダーつき、1クリックで、購入者住所、購入者電話番号、購入商品名、購入商品数。。。などの情報を一気にデータを読み込ませる事ができるかと思いまして。) その場合は、やはりマクロなどの知識が必要になってくるのでしょうか? ちょっと説明が悪い箇所などもございますが、 ご指導いただけると助かります。どうぞよろしくお願いします。

専門家に質問してみよう