Perl перейти к конкретной строке в цикле - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть структура файла журнала, подобная этой:

Start Sollumsatz-Verrechnung 05.12.2018 03:42:51  
Verwende 20 Threads.
Anzahl gesamt     : 162360
Anzahl erfolgreich: 162360
Anzahl fehlerhaft : 0
Ende Sollumsatz-Verrechnung 05.12.2018 04:03:03 

Я хочу сохранить часть информации в хеш (% hash_ref).В «flag-part» мой код переходит к строке «Verwende 20 Threads».но он должен перейти к «Анзал эрфолгрейх».Вы знаете, как это можно сделать?

Любая помощь будет признательна.

my %hash_ref;
my %filter;
my ($act, $time,$flag);
while(my $line = <FILE>) {
    if ($line =~ /(.+? Sollumsatz-Verrechnung)\s+(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d)/) {
            ($act,$time) = ($1,$2);
            $flag = 1;
    }
    elsif ($line =~ /(.+? Deaktiviere PKonten)\s+(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d)/) {
            ($act,$time) = ($1,$2);
            $flag = 1;
    }
    elsif ($line =~ /(.+? PSK historisieren)\s+(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d)/) {
            ($act,$time) = ($1,$2);
            $flag = 1;
    }
    else {
                    if ($flag) {
                            print $line,"\n" # this outputs 'Verwende 20 Threads'
                            if ($line =~ /Anzahl erfolgreich:\s+(.+?)\s*$/) {
                                    #print $line, "\n";
                                    push @{ $hash_ref{$act}{'Anzahl'} }, $1;
                            }
                    }
                    $flag = 0;
    }
    if (! defined($filter{$act}{$time})) {
            push @{ $hash_ref{$act}{'time'} }, $time;
            $filter{$act}{$time} = 1;
    }

}

1 Ответ

0 голосов
/ 06 декабря 2018

Я решил проблему на самом деле так:

else {
       next if $line !~ /Anzahl erfolgreich/;
       if ($flag) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...