У меня есть текстовый файл с разделителями-пробелами, который я читаю и пытаюсь добавить данные на основе месяца, данные выглядят так:
Пн Апр 04 08:00:00 MDT 2011 120.72 0.3 0.707 25.60925.609
Пн Апр 04 07:45:00 MDT 2011 119.94 0.3 0.707 25.443 25.443
Я пытаюсь просто сложить месячные итоги:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use vars;
my $line;
my @data;
my @months;
my ($day, $month, $date, $time, $gmt, $year, $volt, $amp, $pf, $watt, $voltamp,
$voltsum, $wattsum, $count, $months, $monthlytotal );
$voltsum = 0;
$wattsum = 0;
open(DATAFILE, "@ARGV") || die $!;
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
while (<DATAFILE>) {
$line = $_;
chomp $line;
@data = split(/\s/,$line);
$day = $data[0];
$month = $data[1];
$date = $data[2];
$time = $data[3];
$gmt = $data[4];
$year = $data[5];
$volt = $data[6];
$amp = $data[7];
$pf = $data[8];
$watt = $data[9];
$voltamp = $data[10];
Я хочучтобы соответствовать месяцу, добавьте мои данные и напечатайте результат один раз, но мой контроль потока неверен, есть идеи, как это сделать правильно?
Я хочу прочитать каждую строку, проверить, какой это месяц,сложите все похожие месяцы вместе и верните результат.
foreach $months(@months) {
if ( $months =~ $month ) {
$voltsum += $voltamp;
$wattsum += $watt;
print "$month $year $wattsum $voltsum\n";
}
elsif ( $months !~ $month ) {
$voltsum = 0;
$wattsum = 0;
}
}
}
close (DATAFILE);
# print "Month Year Watts Vars\n" ;
# print "--------------------------\n";
# print " $months $month $year $wattsum $voltsum\n\n";