在Perl中读取SIMPLE文件

时间:2010-05-11 11:15:32

标签: perl file

Perl如何读入文件,它如何告诉它前进到文本文件中的下一行,以及它如何使它读取.txt文件中的所有行,直到它到达项目“banana” “?

3 个答案:

答案 0 :(得分:21)

基本上,有两种方法可以读取文件:

  1. 暂停文件意味着一次读取文件。这会占用大量内存并需要一段时间,但之后整个文件内容都在内存中,你可以用它做你想做的事。
  2. 如果您不想读取整个文件(例如,当您到达“banana”时停止),则读取每行文件行(在while循环中)会更好。
  3. 对于这两种方式,您需要使用“open”命令创建FILEHANDLE,如下所示:

    open(my $yourhandle, '<', 'path/to/file.txt') # always use a variable here containing filename
        or die "Unable to open file, $!";
    

    然后你可以通过将文件放入一个数组来啜饮文件:

    my @entire_file=<$yourhandle>; # Slurp!
    

    或使用while循环逐个读取文件

    while (<$yourhandle>) { # Read the file line per line (or otherwise, it's configurable).
       print "The line is now in the $_ variable";
       last if $_ eq 'banana'; # Leave the while-loop.
    }
    

    之后,不要忘记关闭文件。

    close($yourhandle)
        or warn "Unable to close the file handle: $!";
    

    这只是基础知识..文件有很多相关内容,特别是在异常处理中(当文件不存在时,该文件不可读,正在写入),所以你必须阅读或者离开:)

答案 1 :(得分:19)

答案 2 :(得分:1)

首先,你必须打开文件:

open (my $SOME_FILEHANDLE, "<", "filename.txt");

您可能想要检查文件的打开是否成功:

open (my $SOME_FILEHANDLE, "<", "filename.txt") or die "could not open filename";

打开文件后,您可以从$ SOME_FILEHANDLE中读取每行的行数。您将获得<$SOME_FILEHANDLE>构造的下一行:

my $next_line = <$SOME_FILEHANDLE>;
阅读完最后一行后,

$next_line未定义。因此,您可以将整个事物放入while循环:

while (my $next_line = <$SOME_FILEHANDLE>) {
  do_something($next_line);
}

这是有效的,因为未定义的值在while条件下的计算结果为false

如果您想在遇到“banana”时退出循环,您可能会使用正则表达式来检查香蕉:

while (my $next_line = <$SOME_FILEHANDLE>) {
  last if $next_line =~ /banana/;
  do_something($next_line);
}

last运算符退出while循环,当$next_line与香蕉匹配时,它会被“触发”。