簡體   English   中英

如果發生錯誤,如何在perl中跳過一行?

[英]How do I skip a line in perl if an error occurs?

我是perl的新手,我正嘗試從日志文件中拆分和解析數據。 日志文件包含有關備份成功與否的信息。

但是,在日志文件中的某一點,條目會重復自身,並導致解析數據時出現問題。 如果無法解析該條目,該如何跳過?

普通條目位於頂部,而有問題條目位於下方。

> $VAR1 = 'Thu Jul 31 00:35:00 2014'; 
> $VAR2 = 'Daily Backup for (Wed) Jul. 30, 2014 
> STATUS: Successful Thu Jul 31 00:37:22 2014';
> VAR3 = 'Backup Completed: Thu Jul 31 00:40:07 2014


> $VAR1 = 'Fri May 16 00:35:00 2014';
> $VAR2 = 'Daily Backup for (Thu) May. 15, 2014
> STATUS: Successful Fri May 16 00:37:43 2014';
> $VAR3 = 'Daily Backup for (Thu) May. 15, 2014
> STATUS: Successful Fri May 16 00:39:54 2014';
> $VAR4 = 'Backup Completed: Fri May 16 00:42:37 2014



my $stdout = ("cat backup.log");
my @lines = split(/Backup Started: /, $stdout);
shift @lines;

  foreach(@lines)
{

my @backupstarted = split(/\n\n/,$_);
my $start = $backupstarted[0];

my @types = split(/ Backup /, $backuptype);
my $type = $types[0];

my @statuses = split(/ /, $backupstatus);
$statuses[1] =~ s/\://g;
my $status = $statuses[1];

my @enddate = split(/ /, $backup);
my $end = $enddate[0]; 

您的代碼有一些問題。

首先,讓我們以常規方式打開文件:

open my $fh, '<', 'backup.log' or die "Couldn't open `backup.log': $!";

my %backup;
my $current_backup;
while (<$fh>) {
    # when we see a new date...
    # set up a new hash ref for its details
    if (/^\w{3} \w{3} \d+ [0-9:]+ 20\d\d/) {
        chomp;
        $backup{$_} = {};
        $current_backup = $_;
    }

    # look for other known types of lines
    if ($current_backup) {
        if (/^(\w+) Backup /) {
            if ($backup{$current_backup}{type}) {
                delete $backup{$current_backup};
                $current_backup = '';
            } else {
                $backup{$current_backup}{type} = $1;
            }
        } elsif (/^STATUS: (\w+)/) {
            $backup{$current_backup}{status} = $1;
        } elsif (/^Backup Completed: (.*)/) {
            $backup{$current_backup}{completed} = $1;
        } else {
        }
    }
}
close $fh;

但是即使那樣,如果不正常,我也不認為您實際上要跳過該條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM