-1

我有一个日志文件,其中包含各种测试条件的结果。看起来像

Starting TestCon1
Msg1:Criteria
Result:pass
Msg2:Criteria
Result:fail

Starting TestCon2
Msg1:Criteria
Result:fail
Msg2:Criteria
Result:pass

Starting TestCon3
Msg1:Criteria
Result:pass

我想创建一个子例程,它只挑选出“失败的消息以及它们所属的 TestCon。这将被转储到一个摘要文件中,显示 - >失败的消息,结果和它所属的 TestCon

我不知道从哪里开始,谁能告诉我从哪里开始

4

2 回答 2

0

这是一个起点:如果您将$/(行分隔符)设置为空字符串(''""),那么每次调用<>都会返回一个由空行分隔的块。因此,您可以编写如下内容:

sub subroutine_for_user2486369 {
    open my $filehandle, '<', 'file_for_user2486369.txt'
        or die "Couldn't open file: $@";
    local $/ = '';
    while (<>) {
        # now $_ is one of your blocks
        ... # code to examine $_, see if it's what you want, and print
        ... # your result
    }
    close $filehandle;
}
于 2013-07-25T14:16:37.327 回答
0

读取文件,使用正则表达式和变量。

#!/usr/bin/env perl
my $testcon;
my $msg;
while (<STDIN>)
{
    if (/^Starting (.+)$/) { $testcon = $1 }
    elsif (/^Msg(\d+:\s*.+)$/) { $msg = $1 }
    elsif (/^Result:\s*fail$/) { print "$testcon\t$msg\n" }
}
于 2013-07-26T03:48:15.930 回答