如何将文件行结果输入数组?

时间:2012-07-25 15:32:14

标签: perl

到目前为止,我的代码只读取第1行到第4行并打印出来。我想要做的不是打印它们就是把它们放到一个数组中。所以任何帮助将不胜感激。希望只是代码,因为它应该简短。我学习完整代码的速度要快得多,而不是打开另外50个试图将多个概念放在一起的选项卡。希望我能在某些时候学到这一点,不需要帮助。

my $x = 1;
my $y = 4;

open FILE, "file.txt" or die "can not open file";
while (<FILE>) {
    print if $. == $x .. $. == $y;
}

3 个答案:

答案 0 :(得分:1)

您应该将每一行放在一个包含push的数组中:

my $x = 1;
my $y = 4;
my @array;
open FILE, "file.txt" or die "can not open file";
while (<FILE>) {
    push (@array, $_) if ($. >= $x || $. <= $y);
}

答案 1 :(得分:1)

最后的foreach只是证明它有效 - 请注意它不会忽略空行 - 想想你可能想要保留它们。

#!/usr/bin/perl
use warnings;
use strict;
my $fi;
my $line;
my $i = 0;
my @array;
open($fi, "< file.txt");
while ($line = <$fi>) {
    $array[$i] = $line;
    if ($i == 3)
    {
        last;
    }
    $i++;
}
foreach(@array)
{
    print $_;
}

答案 2 :(得分:0)

你知道,一旦你获得了所需的所有数据,你就不需要继续遍历文件了。

my $x = 1;
my $y = 4;
my @array;
my $file = 'file.txt';

# Lexical filehandle, three-argument open, meaningful error message
open my $file_h, '<', $file or die "cannot open $file: $!";

while (<$file_h>) {
  push @array $_ if $_ >= $x; # This condition is unnecessary when $x is 1
  last if $. == $y;
}