2013-09-13 2 views
0

Я работаю над фреймворком, и мне нужно получить некоторые выражения регулярных выражений, но застрял в этом месте, поэтому вам нужна ваша помощь.perl regex extaction, основанный на условии

Execution start time 09/13/2013 02:43:55 pm 

[Case-Url] - www.google.com 


[Req-URL ] - www.qtp.com 


***Passed*** 
__________________________________________________________ 

[Case-Url] - www.yahoo.com 


[Req-URL ] - www.msn.com 


***Passed*** 

___________________________________________________________ 

[Case-Url] - www.google.com 


[Req-URL ] - www.qtp.com 


***Failed*** 

В приведенных выше результатах испытаний, я должен принести [Case-URL] и [REQ-URL] для передаваемых и невыполненных тестов. Как получить только URL-адрес Case и Req-URL для полученных результатов?

Пожалуйста, помогите.

Благодаря

ответ

1

Регулярные выражения не очень уместно. Вместо этого, разделить ваш вход на куски, которые вы разбор по отдельности:

use strict; use warnings; use feature 'say'; 

<DATA>; # discard first line; 
# set record separator 
local $/ = "__________________________________________________________\n"; 
while (my $chunk = <DATA>) { 
    my ($case, $req, $statusline) = split /\n/, $chunk; 
    # possibly parse $case and $req further here 
    if ($statusline =~ /Passed/) { 
    say for $case, $req; 
    } 
} 

__DATA__ 
Execution start time 09/13/2013 02:43:55 pm 
[Case-Url] - www.google.com 
[Req-URL ] - www.qtp.com 
***Passed*** 
__________________________________________________________ 
[Case-Url] - www.yahoo.com 
[Req-URL ] - www.msn.com 
***Passed*** 
___________________________________________________________ 
[Case-Url] - www.google.com 
[Req-URL ] - www.qtp.com 
***Failed*** 

выхода будет:

[Case-Url] - www.google.com 
[Req-URL ] - www.qtp.com 
[Case-Url] - www.yahoo.com 
[Req-URL ] - www.msn.com 
+0

Привет, Спасибо за ответ. Мы почти близки, но у меня есть 1000 экземпляров Case-Urls и Req-Url, и приведенный выше код отображает все строки из входного файла, который имеет эти URL-адреса. Я пробовал следующий код; while (my $ temp = ) { my ($ case, $ req, $ status) = split/\ n /, $ temp; print "$ case \ n"; } Но он отображает все строки и только не первые 2 случая и URL-адреса. –

+0

@ankitdhebar Мой код работает для меня, я не знаю, какой ввод вы используете. Обратите внимание, что я печатаю только URL **, если ** '' status' содержит '/ Passed'. Ваш фрагмент не содержит этого условного! – amon

+0

спасибо, я попробую приведенный выше код .. –

0

Это позволит извлечь неудачные случаи. Затем вы можете извлечь Case-Url и Req-Url с $fifo[0] и $fifo[3]. То же самое можно сделать для прошедших случаев.

#!/usr/bin/perl 

use strict; 
use warnings; 

my @fifo=('') x 7; # Initialize an empty array with size = 7 (Message Block Size) 
open(FILE,"temp.txt"); 

while(<FILE>) 
{ 
    push(@fifo,$_);  # Add element to the end of array making its size 6 
    shift @fifo;   # Remove first element reverting its size back to 5 
    if($fifo[6]=~/Failed/) # Check if 7th line of block has Failed in it 
    { 
     print @fifo; 
    } 
} 
close(FILE); 
+0

спасибо .. Я попробую этот код –

0

Пригодность регулярного выражения для этого конкретного приложения в стороне, вот регулярное выражение, которое будет фиксировать пропущенные адреса:

\([Case-Url\] - .*)\n+(\[Req-URL \] - (.*)\n+\*{3}Passed\*{3} 

я не мог получить эту работу в режиме Perl в regexplanet, но вы можете увидеть это в действии в Rubular here

+0

спасибо, я попробую этот код .. –

Смежные вопросы