在寻求使我的数据更易于访问,我想存储在一个复杂的哈希我表格数据。 我想长出“HoHoHoA”为脚本遍历我的数据。 按照在“perldsc”的指导方针:
push @ { $hash{$column[$i]}{$date}{$hour} }, $data[$i];
该脚本编译并没有问题,运行,但不会不添加任何数据的哈希:
print $hash{"Frequency Min"}{"09/07/08"}{"15"};
返回即使键应该存在什么。 运行“存在”散列表明,它不存在。
我正在读的数据文件是这样的:
DATE TIME COLUMN1 COLUMN2 COLUMN3...
09/06/2008 06:12:56 56.23 54.23 56.35...
09/06/2008 06:42:56 56.73 55.28 54.52...
09/06/2008 07:12:56 57.31 56.79 56.41...
09/06/2008 07:42:56 58.24 57.30 58.86...
.
.
.
我想组一起每一列的在任何给定日期和小时的阵列三个散列为{COLUMN},{DATE}和{HOUR}的值,因此。
所产生的结构如下所示:
%monthData = (
"COLUMN1" => {
"09/06/2008" => {
"06" => [56.23,56.73...],
"07" => [57.31,58.24...]
}
},
"COLUMN2" => {
"09/06/2008" => {
"06" => [54.23,55.28...],
"07" => [56.79,57.30...]
}
},
"COLUMN3" => {
"09/06/2008" => {
"06" => [56.35,54.52...],
"07" => [56.41,58.86...]
}
}
);
看看我的代码:
use feature 'switch';
open DATAFILE, "<", $fileName or die "Unable to open $fileName !\n";
my %monthData;
while ( my $line = <DATAFILE> ) {
chomp $line;
SCANROWS: given ($row) {
when (0) { # PROCESS HEADERS
@headers = split /\t\t|\t/, $line;
}
default {
@current = split /\t\t|\t/, $line;
my $date = $current[0];
my ($hour,$min,$sec) = split /:/, $current[1];
# TIMESTAMP FORMAT: dd/mm/yyyy\t\thh:mm:ss
SCANLINE: for my $i (2 .. $#headers) {
push @{ $monthData{$headers[$i]}{$date}{$hour} }, $current[$i];
}
}
}
}
close DATAFILE;
foreach (@{ $monthData{"Active Power N Avg"}{"09/07/08"}{"06"} }) {
$sum += $_;
$count++;
}
$avg = $sum/$count; # $sum and $count are not initialized to begin with.
print $avg; # hence $avg is also not defined.
希望我的需要是非常明显的。 我怎么可以追加值,这些子哈希里的数组?