Как выделить последнюю строку HTML-таблицы, созданной с помощью Perl? - PullRequest
0 голосов
/ 26 июля 2011

Приведенный ниже код разбивает @stat_array на четверки, а затем распечатывает поля в таблицу HTML с ячейкой OCOMsg2 красного цвета - опять же - только одна ячейка таблицы, отправленной по электронной почте.

Босс сказал мне, чтоон хочет ВСЕЙ ЛИНИИ с 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 красным, а не только в этой ячейке.

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Когда у вас есть данные в @stat_array_rows (довольно плохо названная переменная, на мой взгляд, поскольку она содержит только одну строку за раз), вам просто нужно проверить, содержит ли какой-либо из элементов 'OCOMsg2', и установить флаг, которыйВы можете использовать в остальной части кода.

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

Также.Это 2011 год. Люди больше не используют тег FONT.Вы должны использовать CSS для этого.

1 голос
/ 26 июля 2011

Я пытался угадать, что ты собираешься делать - твой опубликованный код не может быть даже скомпилирован (такие вещи, как else после цикла for в 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 голосов
/ 26 июля 2011

Вам лучше использовать шаблон.Для этой цели я бы выбрал 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>
...