プロが教えるわが家の防犯対策術!

お世話になります。

既存の配付スクリプトを少し改造して、「<>」区切りのデータが入っているファイルの、数字を合計するスクリプトがあります。

集計スクリプト(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」と自動的に入ります。

御教授頂けると助かります。

よろしく御願いします。

A 回答 (1件)

初期化していないだけっぽいので、上のほうに


@total = ();
と入れればいい気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

解決する事ができて、良かったです♪

的確なアドバイスをありがとうございました。

お礼日時:2007/11/08 18:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!