String 如何在perl中从文件中捕获特定字符串并将其转储到diff文件
我有一个日志文件,其中包含各种测试条件的结果。看起来像String 如何在perl中从文件中捕获特定字符串并将其转储到diff文件,string,perl,parsing,String,Perl,Parsing,我有一个日志文件,其中包含各种测试条件的结果。看起来像 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 我想创建一个子例程,它只选择“Msg”,它与它们所属的TestCon一
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
我想创建一个子例程,它只选择“Msg”,它与它们所属的TestCon一起失败。这将被转储到一个显示-->
失败的消息、结果及其所属的TestCon
我不知道从哪里开始,谁能告诉我从哪里开始呢?这里有一个起点:如果你将
$/
(行分隔符)设置为空字符串('
或'
),那么每次调用
都会返回一个由空行分隔的块。因此,你可以编写如下代码:
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;
}
用于用户2486369的子例程{
打开我的$filehandle,“读取文件,使用正则表达式和变量
#!/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" }
}
!/usr/bin/env perl
我的$testcon;
我的$msg;
而()
{
如果(/^Starting(+)$/){$testcon=$1}
elsif(/^Msg(\d+:\s*+$/){$Msg=$1}
elsif(/^Result:\s*fail$/){打印“$testcon\t$msg\n”}
}
询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案、为什么不起作用以及预期的结果。从打开文件并阅读开始?