• 締切済み

足し算のスクリプトについてアドバイスをお願いします

お世話になります。 既存の配付スクリプトを少し改造して、「<>」区切りのデータが入っているファイルの、数字を合計するスクリプトがあります。 集計スクリプト(sum.cgi) #------------------------------------------- if(open(IFILE,"./$data[1]/log.cgi")) { $name = <IFILE>; @title = split("<>",$line); } else { $error = "データファイルを閲覧できませんでした。"; } # 集計結果の表示 foreach (@title) { } while(<IFILE>) { @column = split("<>"); $total[0] = "合計"; for($loop = 1;$loop <= $#column;$loop++) { $total[$loop] += $column[$loop]; } } foreach (@total) { } close(IFILE); #------------------------------------------- 例)ファイルA(ファイルパス:./A/log.cgi) --------------------------------- 2<>10<><><><><> 3<>16<><><><><> 1<>6<><><><><> 5<>3<><><><><> 7<>9<><><><><> --------------------------------- 例)ファイルB(ファイルパス:./B/log.cgi) --------------------------------- 3<>1<><><><><> 10<>14<><><><><> 4<>5<><><><><> 6<>4<><><><><> 2<>6<><><><><> --------------------------------- 例えばファイルAを対象にしてsum.cgiを作動させた場合、$total[1]と記述すると18(2+3+1+5+7)と表示されます。 $total[2]と記述すると、44(1+14+5+4+6)と表示されます。 ※()内は実際には表示されません。合計した数字のみが結果として表示されます。 このsum.cgiを検索CGIに組み込んで、該当データ毎にlog.cgiを読み込んでそれぞれ数字を集計して、表示させたいと思っています。 例えば検索CGIに「英語」と入力して検索すると、ファイルA(仮に「あああ」と表示されるとする)とファイルB(仮に「いいい」と表示されるとする)に関連するデータが表示されるとします。 検索結果の画面には、下記のように表示されます。 ★検索結果★ --------------------------------- あああ --------------------------------- いいい --------------------------------- TOPへ戻る やりたい事は、「あああ」や「いいい」の下にファイルAやファイルBの$total[1]を表示させたいと思っています。 ★検索結果★ --------------------------------- あああ 18 --------------------------------- いいい 25 --------------------------------- TOPへ戻る ですが、実際に動かしてみると順番に数字が合計されて表示されます。 「いいい」の下には43(18+25)が表示されてしまいます。 ★検索結果★ --------------------------------- あああ 18 --------------------------------- いいい 43 --------------------------------- TOPへ戻る 上記のように、下のデータほど上位のデータの累計にならないようにするには、最初に書いた集計スクリプトをどのように書き換えれば良いでしょうか。 対象ファイルパスの指定の中に記述されている、「$data[1]」には自動的に検索該当データに合わせて、数値が入るようになっています。 例の場合$data[1]には、「A」「B」と自動的に入ります。 御教授頂けると助かります。 よろしく御願いします。

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

初期化していないだけっぽいので、上のほうに @total = (); と入れればいい気がします。

mintroll
質問者

お礼

ご回答ありがとうございます。 >初期化していないだけっぽいので、上のほうに >@total = (); >と入れればいい気がします。 教えて頂いたように記述しましたら、データごとに合計を算出してくれるように、無事に動作するようになりました(^^) 私も「初期化」や「リセット」など、いろいろと調べてみたのですが、基本的にperlを勉強していないために、自己解決する事ができなかったため、こちらに質問をさせて頂いた次第です。 解決する事ができて、良かったです♪ 的確なアドバイスをありがとうございました。

関連するQ&A

  • アンケートスクリプトを探しています

    検索エンジンで探したのですが思ったようなものが見つからないので どなたか教えてください。 1.集計結果が棒グラフまたは円グラフなのどのグラフで表示 2.締め切ったアンケートの集計結果が観覧できる 3.該当する項目がない場合ユーザーが追加できる (いたずら防止のため管理人の承認作業が出来ればなおよい) 4.新たなアンケート事項は管理人のみ追加できる CGIスクリプトでもPHPスクリプトでもOKです。

    • ベストアンサー
    • CGI
  • CGIやphpによる投票スクリプトを探しています。集計結果をエクセルで取り込みたいのですが

    CGI、またはphpで作成された投票集計スクリプトを探しています。 機能としては、 1. 投票後結果がグラフなどで表示 2.投票の集計結果をダウンロード後エクセルなどで取り込めるようにしたい この2点なのですが、 エクセルへ取り込めるような機能のついたスクリプトがなかなか見つかりません。 できればフリーのスクリプトで、このような投票スクリプトをご存知でしたら、お知らせいただけると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • ファイルメーカーのスクリプトについて質問です。

    ファイルメーカー5を使ってます。 Aのファイルは受注ファイル、Bのファイルは出荷ファイルにしています。 リレーションを組んで、AのファイルにポータルでBを表示しています。 Aに対して、Bが2ヶ以上の時はあるフィールドに印を付けたくてスクリプトを組みました。 Aのファイルで リレーションを組んでるフィールドをコピー 外部スクリプト(Bへ) Bのファイルで エラー処理[オン] 全レコードを表示 レイアウト切り替え 検索モードに切り替え 貼り付け[Aでコピーしたもの] 検索の実行 If[「status(対象レコード)>=2」] スクリプトの実行[サブスクリプト 外部[Aのファイルとスクリプト1] Else スクリプトの実行[サブスクリプト 外部[Aのファイルとスクリプト2] End If を組んでいるのですが、Aのファイルでスクリプトを実行するとBの検索の実行(検索結果は表示します)で止まってしまいます。 そのまま、Bのファイルでもう一度スクリプトを実行するとちゃんとAのファイルに戻って処理を完了します。 どうしてなのでしょうか? 会社では汎用データー(AS)を基本的に使用しているのですが、色々と使いずらいのでファイルメーカーと併用して使ってます。 BのファイルはASから書き出したデーターをファイルメーカーに取り込んで使用しています。 誰かに教わった訳でもなく、自己流(?)で覚えてきたので、分りずらくてすみませんが教えて下さい。

  • php 時間のかかるスクリプトの結果が表示されない

    ファイルを受け取って加工する php スクリプトを書きました。 結果が出るのに10分ほどかかると、スクリプトは最後まで実行されるにもかかわらず、結果がブラウザに表示されず、ブラウザはデータを待っている状態のままになります(タイムアウトではなく)。 スクリプトが最後まで実行されていることも確認しましたし、apache のログを見ると200を返しています。 もうちょっと小さなデータで実行すると問題なく結果が表示されます。 これはどういうことでしょうか。 どなたかヒントをいただけないでしょうか?

    • ベストアンサー
    • PHP
  • CSVファイルのダウンロード方法について

    CSVファイルのダウンロード方法についてご教授願います。 (いろんなサイトやFAQをみてきましたが、いまいちわからなかったのでここで質問させていただきます。) 現在、 (1)アンケート項目データ採取.cgi(集計プログラミング込み)…ブラウザ上表示はではcgiにhtmlテンプレートを読み込み ↓ (2)集計.CSVにてデータ集計 ↓ (3)検索.cgiにて(2)集計.CSVのソートや詳細の検索ができる ---------- 他、(4)修正phpがあり、(2)集計.cgiを集計できます。 ---------- (1)、(3)、(4)各ページで<a href="***/***/集計.csv">_CSVダウンロード_</a>なるものをリンク表記したのですが、ダウンロードできません。 どうしたらよいでしょうか?

    • 締切済み
    • CGI
  • cshで下記のシェルスクリプトを作ろうとしています。

    cshで下記のシェルスクリプトを作ろうとしています。 スクリプト作成初心者なため質問させてください。 /home/log/FILEA.log(このファイルはある方法で他サーバーのdf -k /dataの出力結果を1分ごとにコピーしています。 Filesystem kbytes used avail capacity Mounted on ebisu:/shares/product/data 767922632 680047616 87875016 89% /data FILEA.logを読み込んで、Mounted が90%以上であった場合に、 /home/nakam-te/volumuというGUIファイルを実行して表示させたいと思っています。 whileやreadを使用して作ればよいのではと思いますが、初めてのスクリプトなので 記述方法がわからなくて困っています。 アドバイスをいただければ幸いです。 よろしくお願いします。

  • SqlServerのスクリプト実行について

    Windows2003ServerにてSqlServer2005をバッチファイルから実行する時について質問させてください。 下記の「sql.bat」にて「script.sql」を実行した場合、「log.txt」に出力される内容は'222'をアップデートした結果「(x行処理されました)」のみが出力されますが、'000'や'111'を更新した結果も出力させたい場合、「script.sql」を3分割し、「sql.bat」で3ファイル実行するしかないのでしょうか。 「sql.bat」 sqlcmd -S SERVERNAME -d SCHEMANAME -i c:\script.sql -o c:\log.txt 「script.sql」 update tablename set data1 = 'aaa' where data1 = '000' update tablename set data1 = 'bbb' where data1 = '111' update tablename set data1 = 'ccc' where data1 = '222'

  • CGIスクリプト フリーで探しています。

    ホームページを見ていると、たまに「いたずら防止の為」という 理由で、私のIPアドレスがそのぺージに表示されて、 (掲示板とかチャットではなくて普通のHTMLページで・・・) 尚且つ、私のIPアドレスが、ちゃんとそのホームページ運営者の側に ログ記録されているページを見かけますが、 そのようなCGIスクリプトを配布しているサイトをどなたか ご存知無いでしょうか? 相手に知られずに、IPアドレスを取得してログを記録するCGIは 有りますが、相手にも表示させて警戒させることができる無料スクリプトは 見当たりません。 是非、ご存知の方、どなたかお教え下さいませ。

    • 締切済み
    • CGI
  • ファイルを利用してデータを入力する・・

    プログラミング初心者です。 本を使って学習しているんですが、書いてあるプログラムをやってみたんですが、上手くいきません。 「例外'System.NullReferenceException'がtest.exeで発生しました」とでます。 #include <stdio.h> int main() { int point[10][40]; int total[10]; int loop1,loop2; FILE *FP; /*ファイルを読み込み可能の状態にする*/ FP=fopen("test.txt","r"); /*ポイントの入力*/ for (loop2=0; loop2<10; loop2++) { for (loop1=0; loop1<40; loop1++) { printf ("背番号%2dの%d打席目のポイントを入力\n",loop2,loop1+1); fscanf (FP,"%d",&point[loop1][loop2]); } } /*ファイルの使用を終了する*/ fclose(FP); /*合計得点の計算*/ for (loop2=0; loop2<10; loop2++) { total[loop2]=0; { total[loop2]=total[loop2]+point[loop2][loop1]; } } /*結果の表示*/ printf ("ーーー結果ーーー\n"); for (loop1=0; loop1<40; loop1++) { for (loop2=0; loop2<10; loop2++) { printf ("%3d:",point[loop2][loop1]); } printf ("\n"); } printf ("---:---:---:---:---:---:---:---:---:---:---:\n"); for (loop2=0; loop2<10; loop2++) { printf ("%3d:",total[loop2]); } return 0; } という、テキストファイルからデータを入力するところなんですが、何処が違うのでしょうか? 教えてください、おねがいします。

  • Script Errorがでます。(過去ログ検索済)

    これまでうまく動いていたcgiを新たに設置したのですが 下記のようなエラーがでます。 Script Error The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file. 使用しているサーバーはxreaです。 パーミッションは 設置cgi[755] にしております。 色々、過去ログをみたりぐぐってみたりしたのですが、 考えられる手はうってみたのですが、 他に考えられる原因は何かありますでしょうか?

    • ベストアンサー
    • CGI

専門家に質問してみよう