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

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

このQ&Aに関連する最新のQ&A

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で質問しましょう!

このQ&Aと関連する良く見られている質問

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

Q$yerr = "$year (Y)"; と記述していいでしょうか?

「" "」の中で、かっこ「( )」を使っても問題ないですか?
エスケープが必要でしょうか?

Aベストアンサー

> $yerr = "$year (Y)";
のような、単なる文字列の文字としてカッコを使う分には、エスケープの必要はありません。
エスケープしなければならないのは、「$ 自身」と「@ 自身」くらいでしょう。
(これらは "~" の中では変数展開されてしまうので、エスケープする必要があります。)

QPrel正規表現で'$1$'.$saltのあたりが理解できない。

小生Perlを勉強中です。
Perl Codeに以下のようなパスワード暗号処理のサブルーチンが
ありましたが、読めません。教えて下さい。

sub encrypt{
local($inpw)=$_[0];
local(@SALT,$salt,$encrypt);

@SALT=('a'..'z','A'..'Z','0'..'9','.','\');
srand;
$salt=$SALT[int(rand(@SALT)).$SALT[int(rand(@SALT))];
$encrypt=crypt($inpw,$salt)||crypt($inpw,'$1$'.$salt);
return $encrypt;
}

とあります。
特に、下から3行目の($inpw,'$1$'.$salt)が
理解できません。
解説していただければ幸いです。

Aベストアンサー

過去に同様の質問がありました。ctpsysさんの疑問にすべて答えられるかどうかわかりませんが、すくなくとも
>下から3行目の($inpw,'$1$'.$salt)が理解できません
というご質問に対しては参考になるかと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,

Q[perl] $xxx == 1 or $xxx == 5 or $xxx == 11 などと書くが面倒です

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

Aベストアンサー

配列なら
my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.


おすすめ情報