【问题标题】:File Handling in Perl: Reading a file from a specific linePerl 中的文件处理:从特定行读取文件
【发布时间】:2014-07-29 02:20:08
【问题描述】:

perl 有没有办法从特定的行号开始读取文件。每当我们在 perl 中读取文件时,我们都会执行while(<$fileHandler>),这使得 perl 解释器从头开始读取文件。如果我不想阅读这些行怎么办?

【问题讨论】:

    标签: perl file-io scripting


    【解决方案1】:

    您可以从头开始跳过行,并以$start_line开始处理,

    my $start_line = 10;
    while(<$fileHandler>) {
      next unless $. == $start_line .. undef;
    
      # ..
    }
    

    range operator .. 还提供以下简写:

    如果标量“..”的任一操作数是常量表达式,则如果该操作数等于 (==) 与当前输入行号($. 变量),则认为该操作数为真。

    因此以上可以简化为:

    while(<$fileHandler>) {
      next unless 10 .. undef;
    
      # ..
    }
    

    【讨论】:

    • @JohnC 是的;它只展示了如何有效地跳过这些行。
    • 天啊!这可能是我对使用unless 感到非常酷的少数几次之一。这太罕见了,我忘记了例子。感谢分享;)
    • @Miller 我不相信自己刚刚写了什么。 ;) 顺便说一句,if not 仍然可以完成这项工作。
    【解决方案2】:

    因为你不知道一行会有多长,所以你必须从文件的开头读取。

    如果你知道你的线有多宽,因为你有一个固定的线宽,或者其他一些方案,那么你可以在你的文件中寻找那个位置。否则,您必须阅读每个字符并搜索“特殊”换行符。

    文本文件只是一长串字符。线条没有什么特别之处。

    【讨论】:

    • 正如 OP 的问题所暗示的那样,这不是 Perl 特有的问题。
    • 是的,它不是 perl 特有的,但它很好地解释了问题:)
    猜你喜欢
    • 2014-07-25
    • 2012-01-22
    • 2011-07-20
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多