【问题标题】:Perl : Ignore first line, while reading per character of filePerl:忽略第一行,同时读取文件的每个字符
【发布时间】:2017-11-20 13:27:05
【问题描述】:

我正在尝试读取如下所示的文件:

> SOME HEADER
ABCDEFGHIJKLMNOP
QRSTUPWXYZ123456

我需要能够读取字符 A、B、C、D 等。每个字符,所以我使用这个循环:

while (read $file, my $char, 1){


  print $char;
  print $.;

  print "\n\n";
}

但问题是,我需要跳过“某些标题”。我需要跳过它不是因为它是第一行,而是基于有一个“> SOME HEADER”子字符串。

打印$。总是输出“6”,即使它不是正确的行号。

【问题讨论】:

  • 显然,您需要保留一个缓冲区并检查该子字符串,然后将其丢弃(清除缓冲区)。或者——逐行读取,检查子字符串并跳过,或者如果你需要的话,用字符逐行处理字符串......那么,你为什么要按字符读取?你需要做什么?
  • $. variable 不适用于 read

标签: perl file parsing character


【解决方案1】:
open my $file,"<","file.txt";
<$file>; #Removing first line
while (read $file, my $char, 1)
{
    print $char;
}

或者设置标志并检查它

my $flag = 0;
while (read $file, my $char, 1)
{
    $flag = 1 and next if(($char =~m/\n|\r\n/) && ($flag == 0));
    next if $flag == 0;
    print $char;
}

【讨论】:

    【解决方案2】:

    逐行处理和然后逐个字符处理不是更容易吗?

    use strict;
    use warnings;
    
    while (<DATA>) {
        chomp;
        next if /^> SOME HEADER/;
    
        for my $char (split(//)) {
            print "$char $.\n";
        }
    }
    
    __DATA__
    > SOME HEADER
    ABCDEFGHIJKLMNOP
    QRSTUPWXYZ123456
    

    输出:

    A 2
    B 2
    C 2
    ...
    4 3
    5 3
    6 3
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2018-01-03
      • 2021-07-29
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多