动脑的机会来了



QUOTE:
原帖由 life382 于 2007-9-25 16:00 发表
啊。。我不是写着要读取kavset - 0 error(s), 1 warning(s)这一串嘛

这倒是可以做到,见笑见笑

if ($line =~ m{kavset - (\d+) error\(s\), (\d+) warning\(s\)})
\d+
带个加号,呵呵,建议你看下书上的正则表达式


[Copy to clipboard] [ - ]
CODE:
use strict;

my $project;
my $configuration;
my $error;
my $warning;
my $logfile = "Log.html";

open LOGFILE, "<$logfile" or die "$!\n";

while (my $line = <LOGFILE>) {
        chomp $line; # and print $line;
       
        if ($line =~ m{Project: (\w+), Configuration: (\w+\|\w+)}) {
                $project = $1 if defined $1;
                $configuration = $2 if defined $2;
                print "Project = $project\n";
                print "Configuration = $configuration\n";
        }
        if ($line =~ m{kavset - (\d+) error\(s\), (\d+) warning\(s\)}) {
                $error = $1 if defined $1;
                $warning = $2 if defined $2;
                print "Error = $error\n";
                print "Warnings = $warning\n";
        }
}

---------------------------

<html>
<head>
        <META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-16">
</head>
<body>
<h3>Rebuild started: Project: kavset, Configuration: Release|Win32</h3>
<h3>kavset - 0 error(s), 1 warning(s)</h3>
</body>
-----------------------
>perl -w test.pl
Project = kavset
Configuration = Release|Win32
Error = 0
Warnings = 1
>Exit code: 0

这帖都能火,不知道偶们flw老大做何感想


QUOTE:
原帖由 life382 于 2007-9-25 15:55 发表
你的正则表达式太有魔力了
读取kavset - 0 error(s), 1 warning(s)这一串呢

error = 0
warning = 1
我像你上面改的if($str =~m{$project- (\d) error(s), (\d) warning(s)})
不行耶,哪里错了。$pro ...

1. 原字符串中的()要加\来转义
2. 若数字可能大于1位数, 用\d+


QUOTE:
原帖由 perljoker 于 2007-9-25 16:06 发表
这帖都能火,不知道偶们flw老大做何感想

主要是这个MM太特殊了........
问题1:好像没读到errors的值
问题2:字符串中的kavset 要用刚才取到的$project变量来用,行不 

ps:得到特殊待遇了……在此谢谢大家了,顺便祝福大家中秋快乐哦



QUOTE:
原帖由 hutule110 于 2007-9-25 16:07 发表

主要是这个MM太特殊了........

恩,搞不好,冲破100帖,就算送flw老大的中秋礼物了,娃哈哈
警告一下 perljoker,不要灌水。
想帮就帮,不想帮就别帮了,楼主和我非亲非故,老扯上我干什么?
perljoker ::这帖都能火 ………… 怎么听得有点变味的感觉。
最后问题,解决一下吧,好过中秋啊