2012-07-25 55 views
-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; 
} 
+2

[你有什麼試過?](http://whathaveyoutried.com) – 2012-07-25 15:34:19

回答

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); 
} 
+0

太棒了!非常感謝你:) – user1463899 2012-07-25 15:37:14

+0

Aaaannd不要忘記投票和/或接受答案! :-) – BaL 2012-07-25 15:40:23

+0

奇怪,他接受了你的回答,但沒有投票!我從我身邊投票..) – SexyBeast 2012-07-25 16:42:28

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 $_; 
} 
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; 
} 
相關問題