【问题标题】:printing arrays to text file (v2)将数组打印到文本文件(v2)
【发布时间】:2013-11-16 12:49:23
【问题描述】:

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

#! /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

【问题讨论】:

    标签: arrays perl printing


    【解决方案1】:

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

    use strict;
    use warnings;
    
    my @array;
    local $" = ',';
    
    while (<>) {
        chomp;
        push @array, $_;
    
        if ( @array == 250 ) {
            print "[@array]\n";
            undef @array;
        }
    }
    

    用法:perl script.pl Infile [&gt;outFile]

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

    变量$" 保存了Perl 的列表分隔符,该分隔符应用于一个插值数组,所以这里不需要join

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:
      #! /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,解决了它。

      【讨论】:

        【解决方案3】:
        $print = print "[", join(",",@array), "]", "\n";
        print OUT $print;
        

        这里是把print的返回值赋给$print,也就是1,因为打印成功了。你想做的是这样的:

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

        【讨论】:

        • 另外@array = [] 也不正确。它创建一个数组引用。应该是@array = ()undef @array
        • 是的,太好了。但是现在我在我的输出文件中得到这样的行:'[ARRAY(0x936cd0),'
        • 甜蜜,完美地做到了。现在我如何让它停止将所有内容打印到屏幕上?我希望它只打印到那个 .txt 文件。
        • 它不应该再打印到 STDOUT 了..你把 '$print = print' 语句留在那里了吗?把它注释掉!
        • @TedDorosheff:这正是这个答案告诉你的
        猜你喜欢
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        • 2017-08-07
        • 2019-05-22
        • 1970-01-01
        • 2011-03-03
        相关资源
        最近更新 更多