2013-03-17 23 views
0

我已經制作了一個腳本來提取日誌文件的內容並計算任務完成時的時差。我的腳本在Perl中的啓動時間總是相同

假設我有四個工作,每個工作都有三個單獨的任務,到目前爲止,我需要每個任務的開始,然後將其打印出來。

除了當我嘗試通過使用$j,$l進行初始化以使其便於使用時,一切都很好,它們被用作二維數組的排序。

問題出在我得到相同的「開始」每個工作的輸出。

$counter$l的值應該是根本原因。

任何人都可以幫忙嗎?我盡我所能,是一種新手。

sub getdate { 
    my $line = $_[0]; 

    ($hrs, $min) = split(':', $line, 3); 
    return $hrs, $min; 
} 

print FILE "<html><head>\n"; 
print FILE "<title>CGI Test</title>\n"; 
print FILE "</head>\n"; 
print FILE "<body>"; 
print FILE "<font size=\"5\" color=\"#008080\" face=\"Tahoma\"><b><u><br>"; 
print FILE "PBI Batch for 22/02/2013"; 
print FILE "</font></b></u><br><br><br>"; 

my $i = 0; 
my $j = 0; 
my $l = 0; 

my @sample; 

#print FILE "<h4>"; 

foreach $header (<COLLECTION>) { 
    chomp($header); 
    ($heading, $filepath) = split(',', $header); 

    #$two[$i]="<font size=\"3\"color=\"#008000\" face=\"Tahoma\"><b><u><br>"; 
    #$two[$i]="<font size=\"3\" color=".$color." face=\"Tahoma\"><b><u><br>"; 
    $two[$i] .= $heading; 

    #$two[$i] .= "</font></u></b><br>"; 
    #print FILE "<font size=\"3\" color=\"#008000\" face=\"Tahoma\"><b><u><br>"; 
    #  print FILE $two[$i]; 
    #print FILE $heading; 
    #print FILE "</font></u></b><br>"; 

    #print $filepath."\n"; 
    open(MYFILE1, $filepath) or die 'Could nont openfile'; 

    my $counter; 
    foreach $list (<MYFILE1>) { 

     chomp($list); 
     ($file, $path) = split(',', $list); 

     #print FILE $file; 
     my @secondstart; 
     my @secondend; 
     my $secondcounter = 0; 

     #print FILE "valueofllllllllllllllllllllllllllll".$l; 
     foreach $counter ($file) { 
      print FILE "valueofllllllllllllllllllllllllllll" . $l; 
      $l++; 
      $sample[$j][$l] = $counter; 
      print FILE "secCOUNTER " . $secondcounter; 
      $secondcounter++; 
     } 

     print FILE "        space"; 

     open(MYFILE, $path) or die 'ERRROR'; 
     my $count = 0; 
     foreach $line (<MYFILE>) { 

      my @endtime; 

      $flag = 'false'; 

      #$counter++; 
      $count++; 
      print FILE $count . "========"; 

      if ($count == 1) { 
       ($hrs, $min) = getdate($line); 
       $starttime[$j][$l] = ($hrs * 60) + $min; 
      } 
      else { 
       ($hrs, $min) = split(':', $line, 3); 
       if ($line =~ m/End of Procedure/) { 
        $flag   = 'true'; 
        $endtime[$j][$l] = $hrs . $min; 
        $endtime[$j][$l] = ($hrs * 60) + $min; 
       } 
       else { 
        $endtime[$j][$l] = ($hrs * 60) + $min; 
       } 
      } 

      $duration[$j][$l] = $endtime[$j][$l] - $starttime[$j][$l]; 

     } 

     # print $flag; 

     #print FILE $file." : "; 
     #print FILE "value of ".$j."and".$l; 
     $startstatus[$j][$l] = "Started at" . $starttime[$j][$l]; 
     $durationstatus[$j][$l] = "&nbspDuration is " . $duration[$j][$l] . "m"; 

     # print FILE "Started at".$starttime; 
     # print FILE "&nbspDuration is ".$duration."m"; 

     #     print FILE "<br>"; 

     close(MYFILE); 

    } 

    my $valueofl = $l; 

    #print FILE "vlaeeofl".$valueofl; 
    print "valueofllllllllllllllllllllllllllll" . $l; 
    $l = 0; 

    if ($flag eq 'true') { 
     $status = 'Completed'; 
     $color = '#008000'; 

     print FILE "<font size=\"3\" color=" 
      . $color 
      . " face=\"Tahoma\"><b><u><br>" 
      . $two[$i] 
      . "</font></u></b><br>"; 
     print FILE $status . "<br>"; 

     while ($l <= $valueofl) { 

      #print $j."and".$l; 
      # print "valueofllllllllllllllllllllllllllll".$l; 

      print FILE $sample[$j][$l] . "&nbsp&nbsp&nbsp&nbsp"; 
      print FILE $startstatus[$j][$l] . "&nbsp&nbsp&nbsp&nbsp"; 
      print FILE $durationstatus[$j][$l] . "<br>"; 
      $l++; 
     } 

     # print FILE $startstatus[$j][0]; 
     # print FILE $durationstatus[$j][0]; 
    } 
    else { 
     #print "valueofllllllllllllllllllllllllllll".$l; 
     #print $j."and".$l; 
     $status = 'In Progress'; 
     $color = 'blue'; 
     print FILE "<font size=\"3\" color=" 
      . $color 
      . " face=\"Tahoma\"><b><u><br>" 
      . $two[$i] 
      . "</font></u></b><br>" 
      . $status; 
    } 
    $i++; 
    $j++; 

} 

print FILE "</body>"; 
print FILE "</html>"; 

close(FILE); 
close(MYFILE1) 
+6

你應該減少你的代碼,這樣它就構成了儘可能小的樣本,它仍然能夠證明你的問題。 – TLP 2013-03-17 11:55:47

回答

4

這是令人震驚的一段Perl。您必須總是開始您的程序use strictuse warnings,並使用my聲明所有變量儘可能地接近它們的第一使用點。這是調試的最基本形式,在詢問其他人的幫助之前,至少要做到這一點。

的問題可能在於你的for聲明

foreach $counter ($file) { ... } 

將執行循環體只是一次,與$content設置爲$file值。我無法想象你的意思。

+0

,'$ content'別名爲'$ file' – ysth 2013-03-17 20:00:02

相關問題