Alo*_*los 3 arrays perl file matrix multidimensional-array
我目前正在尝试将32 x 48的矩阵文件传递给Perl中的多维数组.我能够访问所有值,但访问特定值时遇到问题.任何帮助将不胜感激.我已经设置了数据集的链接以及我下面的代码.
以下是数据集的链接:http: //paste-it.net/public/x1d5301/
这就是我现在的代码.
#!/usr/bin/perl
open FILE, "testset.txt" or die $!;
my @lines = <FILE>;
my $size = scalar @lines;
my @matrix = (1 .. 32);
my $i = 0;
my $j = 0;
my @micro;
foreach ($matrix)
{
foreach ($lines)
{
push @{ $micro[$matrix]}, $lines;
}
}
Run Code Online (Sandbox Code Playgroud)
你似乎并不理解$matrix它只表明@matrix数组索引器后面是什么时候:[ $slot ].否则,$matrix是一个完全不同的变量@matrix(并且两者都不同%matrix).见perldata.
#!/usr/bin/perl
use English;
Run Code Online (Sandbox Code Playgroud)
别!用英语 - 就这样!
这带来了$MATCH,$PREMATCH和$POSTMATCH和incurrs可怕的$&,$`,$'罚款.你应该等到你使用英文变量然后导入它.
open FILE, "testset.txt" or die $!;
Run Code Online (Sandbox Code Playgroud)
两件事:1)使用词法文件句柄,2)使用三个arg open.
my @lines = <FILE>;
Run Code Online (Sandbox Code Playgroud)
只要我选择:不要啜饮大文件.(不是这里的情况,但这是一个很好的警告.)
my $size = scalar @lines;
my @matrix = (1 .. 32);
my $i = 0;
my $j = 0;
my @micro;
Run Code Online (Sandbox Code Playgroud)
我看到我们处于"利润!!" 在这里舞台......
foreach ($matrix) {
Run Code Online (Sandbox Code Playgroud)
你没有变量$matrix你有变量@matrix.
foreach ($lines) {
Run Code Online (Sandbox Code Playgroud)
同样的事情也是如此$lines.
push @{ $micro[$matrix]}, $lines;
}
}
Run Code Online (Sandbox Code Playgroud)
改写:
use strict;
use warnings;
use English qw<$OS_ERROR>; # $!
open( my $input, '<', 'testset.txt' ) or die $OS_ERROR;
# I'm going to assume space-delimited, since you don't show
my @matrix;
# while ( defined( $_ = <$input> ))...
while ( <$input> ) {
chomp; # strip off the record separator
# load each slot of @matrix with a reference to an array filled with
# the line split by spaces.
push @matrix, [ split ]; # split = split( ' ', $_ )
}
Run Code Online (Sandbox Code Playgroud)