• 締切済み

ブラウザ上でsprintf関数の表示がうまくいかないのですが・・・。

はじめまして、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形式で綺麗に並べて表示したいのです。 よろしくお願いいたします。   

みんなの回答

  • naonee
  • ベストアンサー率33% (1/3)
回答No.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";

noname#25358
noname#25358
回答No.2

 あともう1つ。  これは Perl ではなく、HTMLの仕様です。  ですので、スペースの代わりに &nbsp; を使えば綺麗になります。  HTMLでは大部分のスペース文字は飛ばされてしまいますが、&nbsp; はスペースを表す文字で、飛ばされません。

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.1

HTML では、複数の(半角)空白が続いても1個の空白と見なされてしまうので、 普通に書くとくっついてたように見えます。 一つの方法として、ループの前に <PRE>、後ろに </PRE> を出力するようにすれば、固定ピッチで表示されるので、うまくいくと思いますが… print "<PRE>\n"; 数値を表示する処理 print "</PRE>\n"; のような感じです。

関連するQ&A

専門家に質問してみよう