it's hard to give you a good solution without knowing what format you're storing your array in.
Anyway the following does all you ask for, and was inspired by your first response. I would point out that slurping data like this gives funny x,y coordinates when accessing elements from the array (but makes it easy to slurp and pring), eg...
$arr[y][x_from_top]
here's the full code...
#!/usr/bin/perl -w
my @matrix1;
while (<DATA>) {
push @matrix1, [ split(/\s+/) ];
}
my @matrix2 = empty_matrix(35,35);
overwrite_matrix(\@matrix2, \@matrix1, 0, 0);
print get_matrix(\@matrix1);
print "\n";
print get_matrix(\@matrix2);
#==============================================================
sub empty_matrix { map {[ map{0}(1..$_[1]) ]} (1..$_[0]) }
#==============================================================
sub get_matrix { join("\n", map { join(",", @$_) } @{$_[0]} ) }
#==============================================================
sub overwrite_matrix {
my ($array_ref1, $array_ref2, $x_offset, $y_offset) = @_;
my $y = 0;
foreach my $row_ref (@$array_ref2) {
my $x = 0;
foreach my $value (@$row_ref) {
$array_ref1->[$y + $y_offset][$x + $x_offset] = $value;
$x++;
}
$y++;
}
}
__DATA__
2.8017 0 0 0 0 0 0
0 1.2969 0 0 0 0 0
0 0 0.5495 0 0 0 0
0 0 0 0.2329 0 0 0
0 0 0 0 0.1953 0 0
0 0 0 0 0 0.1723 0
0 0 0 0 0 0 0.0959
---
my name's not Keith, and I'm not reasonable.
|