在PERL中读取文件句柄的特定部分

时间:2014-04-27 23:38:24

标签: perl

嗨我有一个想要阅读的大文件。为了节省资源,我想慢慢读取它,一次一行。但是,我想知道是否有办法从文件句柄中读取特定行。例如,假设我有一个test.txt文件,其中包含以1开头的十亿个数字。每个数字都在一个单独的行上。

1
2
3
...

所以现在我要做的就是说第10行就是这个,

open (FILE, "< test.txt") or die "$!"; 
@reads = <FILE>
print $reads[9]; 

然而,有没有办法可以访问文件的某些部分,而不会将所有内容都读成大数组,比如说我想要第10行。

something like FILE->[9]

- 谢谢你提前帮忙!

2 个答案:

答案 0 :(得分:1)

出于内存目的,应使用while循环读取大文件,该循环将逐行读取文件:

open my $fh, '<', 'somefile.txt';
while ( my $line = <$fh> ) {
   //read in text line by line
}

无论哪种方式获得该行号,您都必须阅读整个文件。现在我建议使用while循环和计数器来打印/保存您要查找的行。

答案 1 :(得分:1)

两种方法,逐行处理您的跳过到所需的行。您可以使用输入行号变量$.来帮助:

use strict;
use warnings;
use autodie;

my $line10 = sub {
    open my $fh, '<', 'text.txt';
    while (<$fh>) {
        return $_ if $. == 10;
    }
}->();

或者,您可以使用Tie::File,因为您已经注意到了。然而,虽然该界面非常方便,并且我建议使用它,但它也会在幕后循环播放文件。

use strict;
use warnings;
use autodie;

use Tie::File;

tie my @array, 'Tie::File', 'text.txt' or die "Can't open text.txt: $!";

print $array[9] // die "Line 10 does not exist";