-3

到目前为止,我的代码只读取第 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;
}
4

3 回答 3

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);
}
于 2012-07-25T15:35:02.267 回答
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 $_;
}
于 2012-07-25T15:39:17.537 回答
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;
}
于 2012-07-26T08:23:59.757 回答