条件指定して、一致したものを合計するプログラムを作っています。
しかし、条件にまったく一致する行が無い場合、空欄になってしまい、
次の行が表示されません。
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を計算させています。
コードは今貼れないので、また貼ります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) ExcelVBAで、型が一致しませんのエラーについて 3 2023/06/20 09:51
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonで演算子を変数に代入す...
-
UWSCのSELECT文の記述方法
-
c言語 16進数の2進数への変換
-
16進の10進変換について
-
PEAL if AA or BB
-
数値かどうかの判定方法
-
Lispの、evalはどのようにすご...
-
Application.ScreenUpdating = ...
-
CLispのloop内の挙動について
-
JSONで文字列が長い時
-
どちのほうがすきですか?
-
[python] 文字列を変数名として...
-
VB6で、長い時間かかる処理...
-
FindFirst を複数条件で検索
-
当日の日付をプルダウンメニュ...
-
講義でわからないのですが以下...
-
CGI メールフォームからBCCのア...
-
フォームの日本語が文字化け
-
2つのpythonがあって、一方で...
-
UWSC SLCTBOXもしくはSELECTに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
パイソンのクラスについて
-
Pythonでターミナルに文字を出...
-
文字のカラーとフォントの指定...
-
シェルスクリプトで、空白(ス...
-
I2C接続のLCDディスプレイを使う
-
【至急!!!】python言語で本を見...
-
数値かどうかの判定方法
-
awkの正規表現での最左最短マッ...
-
int(input("○○"))の使い方
-
Pythonでコンソールをクリアす...
-
UWSCのSELECT文の記述方法
-
数値英単語変換
-
pythonで演算子を変数に代入す...
-
C言語
-
switch文のエラーについて
-
10進数→2進数の出力について
-
pythonを使ったプログラミング...
-
c言語 16進数の2進数への変換
-
Pythonでプログラミング プログ...
おすすめ情報