首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Transpose选项卡用perl分隔文本文件,使用Array::Transpose

Transpose选项卡用perl分隔文本文件,使用Array::Transpose
EN

Stack Overflow用户
提问于 2014-03-10 11:59:27
回答 1查看 158关注 0票数 0

我有几个巨大的文本文件,我需要转换。我在使用Array::Transpose来达到这个目的时被困住了--但不知怎么我还是不能结束.这是我的源代码:

代码语言:javascript
复制
#!/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);

我看不出,这个想法有什么问题,就像文件上说的:

代码语言:javascript
复制
use Array::Transpose;
@array=transpose(\@array);

错误代码说:

代码语言:javascript
复制
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方面。我真的不明白这个错误意味着什么。我对任何有用的答案都很满意!

干杯,新手!

编辑:我忘记说的是:我的输入文件写着:

代码语言:javascript
复制
Parameter1 \t Parameter2 \t .... ParameterXY \n 
Value1 \t Value2... 

诸若此类。

我想要一个输出文件,上面写着:

代码语言:javascript
复制
Parameter1 \t Value1 \t .....ValueXY \n
Parameter2 \t Value2 \t......
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-10 12:38:28

您需要分别推送每一行。

代码语言:javascript
复制
    my @row = split(/\t/,$eachline);
    push @array, \@row;

@row是一个一维数组.推\@row制作二维阵列.我认为您还需要一个chomp来删除行尾。

完整程序是

代码语言:javascript
复制
    #!/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) ] ; -- [ ]创建一个数组引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22299488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档