- 締切済み
ブラウザ上で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形式で綺麗に並べて表示したいのです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- naonee
- ベストアンサー率33% (1/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";
あともう1つ。 これは Perl ではなく、HTMLの仕様です。 ですので、スペースの代わりに を使えば綺麗になります。 HTMLでは大部分のスペース文字は飛ばされてしまいますが、 はスペースを表す文字で、飛ばされません。
- ysk6406
- ベストアンサー率40% (237/589)
HTML では、複数の(半角)空白が続いても1個の空白と見なされてしまうので、 普通に書くとくっついてたように見えます。 一つの方法として、ループの前に <PRE>、後ろに </PRE> を出力するようにすれば、固定ピッチで表示されるので、うまくいくと思いますが… print "<PRE>\n"; 数値を表示する処理 print "</PRE>\n"; のような感じです。