プロが教えるわが家の防犯対策術!

はじめまして、Perlをはじめたばかりの初心者です。
 
質問はCGIでOracleのデータベースにアクセスしその結果を
ブラウザ上で表示するというものなのですがこれが思ったように表示
できません。

結果を
1234     35687   98758
123458   7895    5783
  ・        ・       ・
  ・        ・       ・ 
という感じで綺麗に並べて表示したいのです。
そこで私は
       ・
       ・
while (@aRes = $hSt->fetchrow){
$a = sprintf("%-18s","$aRes[0]");
$b = sprintf("%-18s","$aRes[1]");
$c = sprintf("%-18s","$aRes[2]");
print "$a"."$b"."$c"."\n";
}
と記述したところ、上記に書いたような結果をえる事ができました。

しかし、HTML文も一緒に盛り込みたかったので、
print "Content-type: text/html\n\n";
と記述したところ、先ほどの結果が

12343568798758
12345878955783

のようにくっついてしまい、うまくいきません。

HTML形式で表示した場合、うまくsprintfでは表示できないのでしょうか?
もしくは、HTML文で同じ様に文字列を並べて表示するものがあるの
でしょうか?

どうしても、データベースの結果をHTML形式で綺麗に並べて表示したいのです。

よろしくお願いいたします。
  

A 回答 (3件)

sprintfでうまくいかない理由はNo1,No2のかたが言っているので私はブラウザできれいに表示する方法を



結論から言えばテーブルを使います
以下は参考のスクリプトです。何かの役に立てば良いです。
ローカルのでの作業のため、配列の構成等は変えています
------------

[table.pl]
@test = (
"1:2:3",
"11:22:33",
"111:222:333",
"1111:2222:3333"
);

print "<table border=\"0\">\n";
foreach (@test){
@aRes = split ":",$_;
print <<END_TBL;
<tr>
<td>$aRes[0]</td>
<td>$aRes[1]</td>
<td>$aRes[2]</td>
</tr>
END_TBL
}
print "</table>\n";
    • good
    • 0

 あともう1つ。



 これは Perl ではなく、HTMLの仕様です。
 ですので、スペースの代わりに を使えば綺麗になります。
 HTMLでは大部分のスペース文字は飛ばされてしまいますが、 はスペースを表す文字で、飛ばされません。
    • good
    • 0

HTML では、複数の(半角)空白が続いても1個の空白と見なされてしまうので、


普通に書くとくっついてたように見えます。

一つの方法として、ループの前に <PRE>、後ろに </PRE> を出力するようにすれば、固定ピッチで表示されるので、うまくいくと思いますが…

print "<PRE>\n";
数値を表示する処理
print "</PRE>\n";

のような感じです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!