2011-07-26 85 views
0

下面的代碼將@stat_array分解爲四部分,然後 再次將字段打印到HTML表格中,OCOMsg2單元格爲紅色 - - 只是電子郵件表格的一個單元格。如何突出顯示使用Perl生成的HTML表格的最後一行?

老闆告訴我說,他希望與OCOMsg2 紅色整行 - 所以下面的陣列,所有的元素

"ibfarm102 - localtick", 'New York", "hibmis100 - procHKHD2 - Hongkong", "OCOMsg2" 

必須是紅色。

有沒有辦法做到這一點,無需重寫整個塊 - 我真的很喜歡這個塊。

@stat_array = ("ibfarm102 - localtick", "Boston" , "hibmis100 - procHKHD2 - Hongkong", "PidMonRsp", 
"eufarm102 - localtick", "London", "hibmis100 - procHKHD2 - Hongkong" , "PidMonReq" , 
"ibfarm102 - localtick", "New York" , "hibmis100 - procHKHD2 - Hongkong", "PidMonRsp", 
"ibfarm102 - localtick", 'New York", "hibmis100 - procHKHD2 - Hongkong", "OCOMsg2"); 

my @stat_array_rows = @stat_array; 
while (my @stat_array_rows = splice(@stat_array_rows, 0 , 4)) { 
    print MAIL "<tr>\n";while (my @stat_array_rows = splice(@stat_array_rows, 0 , 4)) { 
    print MAIL "<tr>\n"; 
    for my $stat_row(@stat_array_rows) { 
    if ($stat_row =~ /OCCOMsg2/){ 
     print MAIL "<td><font color=red>$stat_row[0]</font></td>\n"; 
     } 
    else { 
     print for my $stat_row(@stat_array_rows) { 
      if ($stat_row =~/OCAlive2/){ 
      print MAIL "<td><font color=red>$stat_row[0]</font></td>\n"; 
    } 
    else { 
     print MAIL "<td>$stat_row</td>\n"; 
    } 
    } 
    print MAIL "</tr>\n"; 
} 

這些塊的結果:

<tr> 
<td>ibfarm102 - localtick </td> 
<td> Boston</td> 
<td> hibmis100 - procHKHD2 - Hongkong </td> 
<td>PidMonRsp</td> 
</tr> 
<tr> 
<td>eufarm102 - localtick </td> 
<td>London</td> 
<td> hibmis100 - procHKHD2 - Hongkong </td> 
<td>PidMonReq</td> 
</tr> 
<tr> 
<td>ibfarm102 - localtick </td> 
<td>New York</td> 
<td> hibmis100 - procHKHD2 - Hongkong </td> 
<td>PidMonRsp</td> 
</tr> 
<tr> 
<td>ibfarm102 - localtick </td> 
<td>New York</td> 
<td> hibmis100 - procHKHD2 - Hongkong </td> 
<td><font color=red> OCOMsg2</font></td> 
</tr> 

我有點想要Perl打印的一切,我的OCOMsg2塊紅色的,而不僅僅是細胞。

+0

>下面的代碼打破了@stat_array到四肢,然後 >打印出的字段中的HTML表格王氏的OCOMsg2細胞紅色 - >再次 - 通過電子郵件發送的表只是一個細胞。 >老闆告訴我,他希望整條線與OCOMsg2 >紅色 - 所以下面的數組,所有元素 - >「ibfarm102 - localtick」,「紐約」,「hibmis100 - procHKHD2 - >香港「,」OCOMsg2「 >需要紅色。 >有沒有辦法做到這一點,而不是重寫整個塊 - 我>真的很喜歡這個塊(謝謝ysth).. – capser

+0

請編輯你的問題與該信息 – Mat

+0

看起來更像是一個html問題,而不是perl。 – TLP

回答

2

當你在@stat_array_rows(在我看來,因爲它一次只包含一行)中的數據時,你只需要檢查是否有任何元素包含'OCOMsg2'並設置一個標誌你可以在代碼的其餘部分使用它。

my $is_OCOMsg2 = grep { /OCOMsg2/ } @stat_array_rows; 

另外。這是2011年。人們不再使用FONT標籤。你應該爲此使用CSS。

+0

你完全通過將OCOMsg排除在陣列之外 - 它工作得很好。是的,這是一個perl腳本,它生成一個用sendmail發送的郵件。所以字體標籤保持不變。再次感謝你。 – capser

+0

@ davorg-我發佈的代碼是不完整的,你不知何故算出我需要什麼 - 再次感謝。 – capser

+0

那你爲什麼不接受我的回答? –

1

我試圖猜測你要做什麼 - 你的代碼張貼不能被編譯(在for循環之後的else循環在perl中幾乎無效)。

什麼是這樣的:

@stat_array = (
    "ibfarm102 - localtick", "Boston", "hibmis100 - procHKHD2 - Hongkong", "PidMonRsp", 
    "eufarm102 - localtick", "London", "hibmis100 - procHKHD2 - Hongkong", "PidMonReq", 
    "ibfarm102 - localtick", "New York", "hibmis100 - procHKHD2 - Hongkong", "PidMonRsp", 
    "ibfarm102 - localtick", "New York", "hibmis100 - procHKHD2 - Hongkong", "OCOMsg2", 
); 

my @stat_array_rows = @stat_array; 
while (my @cols = splice(@stat_array_rows, 0, 4)) { 
    my $color = $cols[3] eq "OCOMsg2"; 
    print "<tr>\n "; 
    print join "\n ", map { 
       "<td>" 
      . ($color ? "<font color=red>" : "") 
      . $_ 
      . ($color ? "</font>" : "") 
      . "</td>" 
     } @cols; 
    print "\n</tr>\n"; 
} 

可能是更好的方式上色會使用CSS,但。

+0

@brw - 我很抱歉,這無法編譯 - 我在一個早晨發佈,並且無法格式化問題。我沒有包含所有的信息。下次我會更加小心。 – capser

0

你最好使用模板。爲此,我會去HTML::Template。加上List::MoreUtils::natatime,你可以乾淨地解決問題。

#!/usr/bin/env perl 

use warnings; use strict; 
use HTML::Template; 
use List::MoreUtils qw(natatime); 

my $tmpl = HTML::Template->new(
    scalarref => \ do {local $/; <DATA>} 
); 

my @stat_array = (
    "ibfarm102 - localtick", "Boston" , "hibmis100 - procHKHD2 - Hongkong", "PidMonRsp", 
    "eufarm102 - localtick", "London", "hibmis100 - procHKHD2 - Hongkong" , "PidMonReq" , 
    "ibfarm102 - localtick", "New York" , "hibmis100 - procHKHD2 - Hongkong", "PidMonRsp", 
    "ibfarm102 - localtick", "New York", "hibmis100 - procHKHD2 - Hongkong", "OCOMsg2" 
); 

my @rows; 

my $it = natatime 4, @stat_array; 
while (my @cells = $it->()) { 
    push @rows, { 
     CELLS => [map +{CELL => $_}, @cells], 
     HIGHLIGHT => $cells[-1] eq 'OCOMsg2' 
    }; 
} 

$tmpl->param(ROWS => \@rows); 

print $tmpl->output; 


__DATA__ 
<!DOCTYPE HTML> 
<html> 
<body> 
<table> 
<TMPL_LOOP ROWS> 
<TMPL_IF HIGHLIGHT> 
<tr style="color:red"> 
<TMPL_ELSE> 
<tr> 
</TMPL_IF> 
<TMPL_LOOP CELLS> 
<td><TMPL_VAR CELL></td> 
</TMPL_LOOP> 
</tr> 
</TMPL_LOOP> 
</table> 
</body> 
</html> 
+0

他們沒有List :: MoreUtils :: natatime,模塊在工作時編譯 - 看起來很酷。感謝您的幫助。 – capser

相關問題