in reply to Brain muchly befuddled by nested hashes
I formatted $hour to have a leading '0', if necessary, using the sprintf function.
There are 2 hashes: one for accumulating the daily totals and one for accumulating the hourly stats.
Chrismy %daily_total; my %hourly_stats; while (<DATA>) { # looking for: 06/05/2008 8:31a if (m{\d\d/(\d\d)/\d{4}\s{1,2}(\d+):(\d\d)(a|p)}) { my $day = $1; # get day my $hour = sprintf "%02d", $2; # get hour my $minute = $3; # get minutes my $ampm = $4; # get am or pm if ($ampm eq "p" && $hour != 12) {$hour += 12; } $hour = '00' if $ampm eq "a" && $hour == 12; $daily_total{$day}++; $hourly_stats{$day}{$hour}{total}++; if ($minute <= 29) { $hourly_stats{$day}{$hour}{HalfHour00}++; } else { $hourly_stats{$day}{$hour}{HalfHour30}++; } } } for my $day (sort keys %daily_total) { print "day: $day, total: $daily_total{$day}\n"; for my $hour (sort keys %{ $hourly_stats{$day} }) { print "hour: $hour\n"; print " first 1/2 hr: ", $hourly_stats{$day}{$hour}{HalfHour +00}|| 0,"\n"; print " second 1/2 hr: ",$hourly_stats{$day}{$hour}{HalfHour +30}|| 0,"\n"; print " total/hour: $hourly_stats{$day}{$hour}{total}\n"; } print "\n"; }
Update: A change to output routine to correct error found using dataset provided by johngg.
|
|---|