【发布时间】:2018-12-04 15:12:50
【问题描述】:
我编写了一个 Perl 程序来创建一个网页,其中包含一个从文本文件 textfile.txt 派生的 HTML 表格。
我想更改它,以便表格的单元格根据文本内容着色。例如,如果文本是Reject,那么单元格的背景应该是红色的。
这是我尝试过的两种方法。他们都没有工作
方法一
if ( $_ eq "REJECT" ) {
print map { "<td style=width:705 bgcolor=#FF0000 >REJECT</td>" } @$d;
}
方法二
foreach my $d ( @data ) {
$d //= ''; # Convert undefined values to empty strings
my $class;
if ( $d eq 'REJECT' ) {
$class = 'hilite';
}
$html .= '<td';
$html .= " class='$class'" if $class;
$html .= ">$d</td>";
}
Perl 程序
#!/usr/bin/perl
print "Content-type: text/html\n\n";
use strict;
use warnings;
my $output = `cat textfile.txt`;
my @lines = split /\n/, $output;
my @data;
foreach my $line ( @lines ) {
chomp $line;
my @d = split /\s+/, $line;
push @data, \@d;
}
my $color1 = "black";
my $color2 = "darkgreen";
my $color3 = "black";
my $color4 = "red";
my $color5 = "lime";
my $num = 6;
my $title = "This is the heading";
my $fstyle = "Helvetica";
print "<body bgcolor = $color3>";
print "<font color = $color5 face = $fstyle size = $num>$title</font><br />";
foreach my $d ( @data ) {
print "<html>";
print "<body>";
print "<table style=table-layout= fixed width= 705 height=110 text = $color4 border = 2 bordercolor = $color1 bgcolor = $color2>";
print "<tr>";
print map {"<th style=width:705 >Column1</th>"}
print map {"<th style=width:705 >Column2</th>"}
print "</tr>";
print "<tr>";
print map {"<td style=width:705 >$_</td>"} @$d;
if ( $d eq 'REJECT' ) {
print map {"<td style=width:705 bgcolor=#FF0000 >Reject</td>"} @$d;
}
print "</tr>";
print "</table>";
print "</body>";
print "</html>";
}
输入文本文件:
Column1 Column2
Accept Reject
Accept Reject
Accept Reject
这一行
print map { "<td style=width:705 bgcolor=#FF0000 >Reject</td>"
正在向单元格添加背景颜色 RED,但它与条件 Reject 不匹配。
输出
【问题讨论】:
-
为什么
map { ... }在<th>字符串周围?您已经清楚地发现有问题是因为您发现如果以分号结束语句将不起作用。你不能盲目地复制别人的代码而不了解它的作用。你所写的将首先打印Column2,然后是Column1。 -
"这一行正在为单元格添加背景颜色 RED,但它与条件 Reject 不匹配" 这是什么意思?所有行都包含
Reject,并且都显示为红色。这就是你所要求的。 -
抱歉给您带来了困惑。我也附上了脚本的输出。这个 Perl 脚本将 textfile.txt 作为输入,并以 html 表格格式打印其内容,如上所示。我只需要将输出中的 Reject 单元格更改为 RED。也就是说,如果表格单元格值为 Reject,则将该单元格的背景打印为 RED。上面的代码是一种 POC,我也用通用术语替换了实际值,但要求是一样的。是的,我从网络上获取了部分代码,因为我对 perl 脚本非常陌生,并且尽我所能去学习。
-
“是的,我从 web 获取了部分代码,因为我对 perl 脚本非常陌生,并且尽我所能去学习”互联网没有努力学习。您已经使用
map { ... }好几天了,没有正当理由。我再说一遍,你绝不能在不了解它的作用和工作原理的情况下简单地复制别人的代码。鉴于我的警告,我希望您至少阅读map上的 Perl 文档。现在就去做吧。 -
我不知道您认为通过从您的问题中删除 Perl 代码所做的改进。我已经把它放回去了。
标签: html css perl html-table