2013-09-13 2 views
-2

у меня есть это:Как читать строку из строки ниже?

//VIOLATION_IGNORED 
T_CH *i_pCH2string; 

Я хотел бы прочитать // VIOLATION_IGNORED от второй линии. Как я могу обрабатывать регулярное выражение?

Я пишу его, используя Understand API. Понимание - это инструмент статического анализа, использующий его собственный API через perl для написания скриптов. Мне просто нужно регулярное выражение для чтения первой строки, со второй.

+0

первая строка // VIOLATION_IGNORED и второй один T_CH * i_pCH2string; –

+0

Что ты имеешь в виду? какой у вас код? – fugu

+0

У меня есть код C, и я пишу скрипт perl для анализа кода через инструмент статического анализа. Затем, со второй строки, я хотел бы иметь возможность прочитать первый, а затем сообщить моему инструменту игнорировать это нарушение. –

ответ

0

Достигает ли это того, что вам нужно?

#!/usr/bin/perl 
use warnings; 
use strict; 

my @file = ('//VIOLATION_IGNORED', 'T_CH *i_pCH2string'); 

my $current_line = ""; 

foreach (@file){ 
    my $previous_line = $current_line; 
    $current_line = $_; 
     if ($current_line =~ /T_CH.*?/){ 
      print "$previous_line\n" 
      # Do something else? ... 
     } 
} 

Выход:

//VIOLATION_IGNORED 

Или, если вы просто хотите, чтобы игнорировать строки, содержащие // VIOLATION_IGNORED:

foreach (@array1){ 
    next if $_ =~ /\/\/VIOLATION_IGNORED/; 
    print "$_\n"; 
    # Do something else? ... 
} 

Выход:

T_CH *i_pCH2string 
+0

Thanx ... Что, если вторая строка может быть чем угодно? –

+0

Просто используйте: 'if ($ _ = ~/\/\/VIOLATION_IGNORED /) { \t ...} ' – fugu

1

Вы не прочитайте предыдущую строку ... вы просто помните w шляпа была на нем. псевдокод:

while(<>) { 
    if ((/\/\/VIOLATION_IGNORED/) {$ignore=1;next;} # ignore violation on next line 
    if (violation($_)) {       # yo' bad? 
     if($ignore) {ignore=0; next;}    # never mind 
    } else { 
     blow_up($_);        # take this! 
    } 
    ignore=0;          # reset flag 
} 
Смежные вопросы