我已经解压缩了......我怎么能算列?

时间:2011-04-08 00:08:25

标签: perl

我正在使用unpack来解析一些带有某些列的文本文件。每个文本文件都不同,并且列数不同。如何计算列数以便我不会出错?现在我使用的是0..5但是如果文本文件有3列,那么我会收到一个错误:“在替换中使用未初始化的值...”。 THX!

open (PARSE,"<$temp") or die $!;

my @template = map {'A'.length} <PARSE> =~ /(\S+\s*)/g; 

next unless @template;
$template[-1] = 'A*';# set the last segment to be slurpy

my $template = "@template";

my @data;

while (<PARSE>) {
    push @data, [unpack $template, $_]
}

for my $dat (@data){ # for each row

    for(0..5){ # for each column in that row
    $dat->[$_]=~s/^\s+//g;
          $dat->[$_]=~s/\s+$//g; 
    print $dat->[$_].',';
    }
    print "\n";

 } 

2 个答案:

答案 0 :(得分:3)

使用Perl,Python,Ruby等语言,在迭代数组时很少需要屈服于下标级别:

for my $cell (@$dat){
    # Work with $cell rather than $dat->[$_].
    ...
}

答案 1 :(得分:0)

使用Tie::File可能更简单,更清晰,这样您就不必将所有内容都读入内存,但这是使用您设置的@data列表的一种方式:

my $dataFirstLine = $data[0];
chomp($dataFirstLine);
my @dataColumns = split("\t", $dataFirstLine); # assumes delimiter is tab, replace with escaped delimiter of choice
my $dataColumnCount = scalar @dataColumns;
print "number of columns: $dataColumnCount\n";