2016-11-01 5 views
0

テキストファイル内の項目は、パイプ記号 "|"で区切られています。以下のCGIファイルは、項目を指定されたラベルの下の表に表示します。このTable Outputをご覧ください。これは私が持っているものです。どのようにして項目が指定された列に存在するように修正するのですか?データを保持するために、何のMySQLやSQL、単にテキストファイルここPERL 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>"; 

は、テキストファイルにアイテムを格納するために使用されたCGIファイルが存在しません

#!/usr/bin/perl -w 
use strict; 
use warnings; 
use CGI qw(:standard); 
use CGI::Carp qw(fatalsToBrowser); 
print "Content-type: text/html\n\n"; 
my $sku = param('sku_code'); 
my $cust = param('customer'); 
my $description = param('description'); 
my $selling = param('price'); 
my $price = sprintf("\$%.2f"); 

print <<HERE; 
<HTML> 
<BODY> 
<H3>Here is your order...please check</H3> 
SKU: $sku<br> 
Name: $cust<br> 
Description: $description<br> 
Selling Price: $price<br> 
HERE 
open (ORDERS, ">>inventory.txt") or die "File error, $!"; 

print ORDERS "$sku|$cust|$description|$price\n"; 
close ORDERS; 

答えて

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年のようです。最近は要素を閉じてしまう傾向があります。
+0

ありがとうございます。これはとても助けになりました –

0

ORDERSの各ラインを分割しますパイプ文字であなたは言う必要があります:

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

テーブルに変更がないようです。 –

+0

申し訳ありませんが、コピーして貼り付けて、バックスラッシュをよくフォーマットしてください – sotona

関連する問題