【问题标题】:Parsing irregular command's output in perl在 perl 中解析不规则命令的输出
【发布时间】:2016-05-20 18:32:54
【问题描述】:

我对 Perl 还是很陌生,编写能够成功解析结构化文本文件的 Perl 脚本非常困难。

基本上,该文件包含类似于以下的文本:

//test/some_text/value1
... #001 some non important text
... #023 some non important text
//test/some_text/value2
... #1123 some non important text
//test/some_text/value3
... #001 some non important text
... #023 some non important text
... #022 some non important text
... #566 some non important text
//test/some_text/value4
... #42 some non important text

不幸的是,我无法预测在每行以 // 开头的下面会有多少个带点的行,我希望得到这样的输出:

//test/some_text/value1 - 001
//test/some_text/value1 - 023
//test/some_text/value2 - 1123
//test/some_text/value3 - 001
//test/some_text/value3 - 023
//test/some_text/value3 - 022
//test/some_text/value3 - 566
//test/some_text/value4 - 42

我正在逐行读取文本文件,但我觉得这不是最佳解决方案。非常感谢您的提示和帮助解决问题。

【问题讨论】:

    标签: perl parsing


    【解决方案1】:

    逐行是可以的。你只需要存储前缀行。

    use warnings;
    use strict;
    
    my $prefix;
    while (<DATA>) {
        if (m{^//}) {
            chomp;
            $prefix = $_;
        }
        else {
            my ($num) = /#(\d+)/;
            print "$prefix - $num\n";
        }
    
    }
    
    __DATA__
    //test/some_text/value1
    ... #001 some non important text
    ... #023 some non important text
    //test/some_text/value2
    ... #1123 some non important text
    //test/some_text/value3
    ... #001 some non important text
    ... #023 some non important text
    ... #022 some non important text
    ... #566 some non important text
    //test/some_text/value4
    ... #42 some non important text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多