使用Array :: Transpose使用perl转置制表符分隔的文本文件

时间:2014-03-10 11:59:28

标签: arrays perl

我有几个巨大的文本文件,我需要转置。为此目的,我仍然坚持使用Array :: Transpose的想法 - 但不知怎的,我不能走到尽头...... 这是我的源代码:

#!/usr/bin/perl

use warnings;
use strict;
use Array::Transpose;

my $eachline;
my $input=$ARGV[0];
my @array;

open (IN, "<$input") or die ("no such file!");
while(defined($eachline=<IN>))
{
   push @array, split(/\t/,$eachline);
}

my @array2=transpose(\@array);

我无法看到,这个想法有什么问题,正如文件所说:

use Array::Transpose;
@array=transpose(\@array);

错误代码显示:

Can't use string ("") as an ARRAY ref while "strict refs" in use at /usr/local/share/perl/5.14.2/Array/Transpose.pm line 91, <IN> line 3.

我在编程方面几乎是新手,特别是在Perl中。我真的不明白这个错误意味着什么。我很满意任何有用的答案!

干杯,新手!

编辑:我忘了说:我的输入文件说:

Parameter1 \t Parameter2 \t .... ParameterXY \n 
Value1 \t Value2... 

等等。

我想要一个输出文件:

Parameter1 \t Value1 \t .....ValueXY \n
Parameter2 \t Value2 \t......

1 个答案:

答案 0 :(得分:1)

您需要分别推送每一行。

    my @row = split(/\t/,$eachline);
    push @array, \@row;

@row是一维数组。按\@row会产生二维数组。我想你也希望chomp删除行结尾。

完整的程序

    #!/usr/bin/perl

    use warnings;
    use strict;
    use Array::Transpose;
    use Data::Dumper;

    my $eachline;
    my $input=$ARGV[0];
    my @array;

    open (IN, "<$input") or die ("no such file!");
    while(defined($eachline=<IN>))
    {
       chomp $eachline ;
       my @row = split(/\t/,$eachline);
       push @array, \@row;
    }

    print Dumper(\@array) ;
    my @array2=transpose(\@array);

    print Dumper(\@array2) ;

另一种方式是push @array, [ split(/\t/,$eachline) ] ; - [ ]创建一个数组引用。