dポイントプレゼントキャンペーン実施中!

条件指定して、一致したものを合計するプログラムを作っています。
しかし、条件にまったく一致する行が無い場合、空欄になってしまい、
次の行が表示されません。

open (IFILE, $file) or die "$!";
while ($line = <IFILE>) {
chomp($line);
@column = split(",",$line);
if ((@column[7] eq $kensouken) && (@column[4] eq $tantou1) && (@column[32] >0 ) && ( @column[33] <=0 ))
{for($loop = 1;$loop <= 5;$loop++) {
$total3[$loop] += @column[32];
}}
elsif ((@column[7] eq $kensouken) && (@column[4] eq $tantou1) && (@column[32] <= 0) && (@column[33] > 0))
{for($loop = 1;$loop <= 5;$loop++) {
$total4[$loop] += @column[33];
}}}
print "$total3[1]";
print "$total4[1]";
としています。上記2つの条件にマッチしない場合、$total3、$total4が無効になっているのでしょうか。
次に書いている行が表示されなくなってしまいます。

条件に一致しない場合、0を表示したいのですが、どうしたら良いでしょうか。よろしくお願いします。

A 回答 (3件)

見た感じ、加算してるだけなので、


$total3[1] = 0; $total4[1] = 0;
――と初期化しておけばよいかと。

この回答への補足

入れてみましたが、どうもうまくいきません。
条件に一致する場合は、合計を出すようにしたいのですが・・

補足日時:2011/09/25 15:07
    • good
    • 0

「次に書いている行」というのは、


print "$total3[1]";
print "$total4[1]";
ですよね?

頭のほうで次の2行を足しておけば、とりあえず動くんじゃないかなとは思います。
@total3 = (0, 0, 0, 0, 0, 0);
@total4 = (0, 0, 0, 0, 0, 0);

<おまけ>
$kensoukenや$tantou1の代入箇所等読み取れないので、全部コード貼ったほうが良いのではないかなと思いました。

各カラムの中に「,」を含むことのないCSV形式なのでしょうか?
入力データ次第でしょうが、CSVモジュールを使ったほうが安全な気もします。

if文の内容に重複があるので、まとめた方が読みやすいかもしれません。

@total3, @total4を配列にしているのは何か理由があるのでしょうか?
ざっとみるかぎり、先頭から2番目の要素しか使っていないようにも思えます。

というあたりを、CSVモジュール以外個人的にまとめ直してみました。
(入力は標準入力に変えてあります。)
http://ideone.com/cB4qR

この回答への補足

すいません。
プログラムの先に、
$per = $total3[1]/$total4[1]*100;
$per2 = sprintf("%.1f",$per);
としており、これが表示されない原因でした。
unnless ($total4[1]<=0){
$per = $total3[1]/$total4[1]*100;
$per2 = sprintf("%.1f",$per);
}else{$per2="0%"}としたら、表示されました。
ありがとうございました。

補足日時:2011/09/26 21:21
    • good
    • 0
この回答へのお礼

ありがとうございます。なんとか変数初期化できました。
@tantou は別ファイルに保存している、担当者コードを代入したものです。
担当者コードを別ファイルから読み込み、マッチしたら合計するというものです。
担当者ごとに合計したいため、上記のプログラムを何回も繋げて、@tantou1 @tantou2を計算させています。
コードは今貼れないので、また貼ります。

お礼日時:2011/09/26 07:05

ちなみに


@column[33] <=0
とか
$total3[$loop] += @column[32];
とかは意味をきちんと理解して使っていますか?
    • good
    • 0
この回答へのお礼

いいえ。ネットで調べて、合計値を取得する位にしか認識がありません。

お礼日時:2011/09/26 07:06

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