文本文件中的项目用管道符号" |"分隔。下面的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>";
答案 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")
- 看起来不错!答案 1 :(得分:0)
用管道字符分割ORDERS中的每一行,你应该说:
my @fields=split(/\|/, $_);