PERL CGI:如何通过在表格上读取/显示数据来修复分割功能?

时间:2016-11-01 15:06:11

标签: perl cgi

文本文件中的项目用管道符号" |"分隔。下面的CGI文件将在其指定标签下的表格中显示项目。请参阅此Table Output,这就是我拥有的内容。我如何修复,以便项目在他们指定的列中,而不只是在一个?没有MySQL或SQL来保存数据,只是一个文本文件

Max;Durchschn.Wassertemp;Barometer

01.11.2016;9.5;6.8;12;1023.2

以下是用于将项目存储到文本文件

的CGI文件
#!/usr/bin/perl -w
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use strict;
use warnings;
print "Content-type: text/html\n\n";

 print "<TABLE BORDER>\n";
 print "<TR><TH>SKU Code<TH>Name<TH>Description<TH>Price"; 

open ( ORDERS, "inventory.txt" ) or die "Error opening file, $!";
 while(<ORDERS>) {
    print "<TR>\n";
    print "<TD>";
my @fields=split(/\<\*\>/);
    print join(`<TD>`,@fields); 
    print "</TR>";
 }
close ORDERS;
 print "</TABLE>";

2 个答案:

答案 0 :(得分:3)

这样的事情会起作用。

# Best practice: three-arg open() and lexical filehandle
open my $order_fh, '<', 'inventory.txt' or die "Error opening file, $!";

while(<$order_fh>) {
  print "<TR>\n";
  print '<TD>' . join('</TD><TD>', split /\|/) . "</TD>\n";
  print "</TR>\n";
}

close $order_fh;

此代码显示rather familiar。请考虑我在那里使用模板系统的建议。

您的代码的其他一些评论:

  • use warnings取代-w。你不需要两者。
  • 使用header()(来自CGI.pm)打印标题。
  • my $price = sprintf("\$%.2f") - 看起来不错!
  • 你真的需要添加一些文件锁定。
  • 你的HTML看起来就像是从1995年开始。我们现在倾向于关闭元素。

答案 1 :(得分:0)

用管道字符分割ORDERS中的每一行,你应该说:

my @fields=split(/\|/, $_);