条件指定して、一致したものを合計するプログラムを作っています。
しかし、条件にまったく一致する行が無い場合、空欄になってしまい、
次の行が表示されません。
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を表示したいのですが、どうしたら良いでしょうか。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
「次に書いている行」というのは、
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%"}としたら、表示されました。
ありがとうございました。
ありがとうございます。なんとか変数初期化できました。
@tantou は別ファイルに保存している、担当者コードを代入したものです。
担当者コードを別ファイルから読み込み、マッチしたら合計するというものです。
担当者ごとに合計したいため、上記のプログラムを何回も繋げて、@tantou1 @tantou2を計算させています。
コードは今貼れないので、また貼ります。
No.3
- 回答日時:
ちなみに
@column[33] <=0
とか
$total3[$loop] += @column[32];
とかは意味をきちんと理解して使っていますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
int(input("○○"))の使い方
-
16進の10進変換について
-
シェルスクリプトで、空白(ス...
-
関数「exists」と「defined」の...
-
pythonの この問題が分かりませ...
-
チェックボックスのCGIへの値の...
-
pythonの*
-
pythonで演算子を変数に代入す...
-
ポケコンの文字移動が上手くで...
-
UWSCのSELECT文の記述方法
-
linuxにおけるCの自作ヘッダフ...
-
pythonを使ったプログラミング...
-
pythonのmap、結果の利用は1度...
-
【至急!!!】python言語で本を見...
-
変数の中は文字列か数値か調べ...
-
*の使い方ですが
-
c言語 16進数の2進数への変換
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
<SELECT>タグの折り返し
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
【至急!!!】python言語で本を見...
-
c言語 16進数の2進数への変換
-
関数「exists」と「defined」の...
-
int(input("○○"))の使い方
-
シェルスクリプトで、空白(ス...
-
switch文のエラーについて
-
UWSCのSELECT文の記述方法
-
pythonで演算子を変数に代入す...
-
pythonの*
-
pythonを使ったプログラミング...
-
pythonで改行を含めてfindする方法
-
変数の中は文字列か数値か調べ...
-
Pythonの np.indicesに関する質...
-
python3について。
-
シェルスクリプト+perl
-
PythonのJanomeを使って品詞の...
-
python print文のエラー
-
perでメールが送信出来ない場合...
-
数値かどうかの判定方法
おすすめ情報