将数组打印到文本文件(v2)

时间:2013-11-05 15:26:17

标签: arrays perl printing

昨天我问了这个问题并得到了很多有用的答复,希望今天也是如此。这是我修改过的脚本。

#! /usr/bin/perl
use strict;
use warnings;

my $line;
my @array;
my $print;

open (OUT , ">","output.txt")or die "cant open: $!"; 
while ($line  = <>){
        chomp($line);
        push(@array, $line);
        if(@array == 250){
        $print = print "[", join(",",@array), "]", "\n";
        print OUT $print;
        @array = []
}
}

最初我简单地说我需要将数组的前250个元素打印到文本文件中,并且该数组是从标准输入构建的。我没有说明的是,构建数组的输入可能包含数千行。从此输入创建数组的原因是,我可以将数组的大小限制为250个实体,然后将数组作为格式化字符串打印。然后我需要刷新数组并恢复构建输入的第251行,并继续对输入的其余部分执行此过程。让我们说输入是5k行,我希望我的输出是一个包含原始5k输入行的文本文件,但是分成由250个数组实体组成的字符串。

目前,脚本只是将数组打印到屏幕上,而“ouput.txt”里面只有一行:1111111

3 个答案:

答案 0 :(得分:4)

$print = print "[", join(",",@array), "]", "\n";
print OUT $print;

在这里,您要将print的返回值分配给$ print,即1,因为打印成功。你想要做的是:

print OUT "[", join(",",@array), "]", "\n";

答案 1 :(得分:2)

这是另一个只是稍微修改你的脚本的选项:

use strict;
use warnings;

my @array;
local $" = ',';

while (<>) {
    chomp;
    push @array, $_;

    if ( @array == 250 ) {
        print "[@array]\n";
        undef @array;
    }
}

用法:perl script.pl Infile [>outFile]

最后一个可选参数将输出定向到文件。

变量$"保存Perl的列表分隔符,该分隔符应用于插值数组,因此此处不需要join

希望这有帮助!

答案 2 :(得分:1)

#! /usr/bin/perl
use strict;
use warnings;

my $line;
my @array;
my $print;

open (OUT , ">","moloch_chunker_output.txt")or die "cant open: $!";
while ($line  = <>){
        chomp($line);
        push(@array, $line);
        if(@array == 250){
        print OUT "[", join(",",@array), "]", "\n";
        @array = ();
}
}

谢谢davs,修复了它。