我有一个日志文件,其中包含各种测试条件的结果。它看起来像
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一起失败的" Msg。这将被转储到显示 - >的摘要文件中。 失败的Msg,结果和它属于的TestCon
我不知道从哪里开始,任何人都可以告诉我从哪里开始
答案 0 :(得分: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;
}
答案 1 :(得分: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" }
}