表形式データのHTML化スクリプト 99/8/15(Sun) 01:37pm

-----^ schetbl.pl
# schedule.txtの最初の部分をhere documentの手法で出力します。
# EOBの行までがそのまま出力されます。これも便利ですね。
print <<EOB;
<HTML>
<BODY>
<TABLE BORDER=7>
<CAPTION ALIGN=top><B>スケジュール</CAPTION>
<TH>日付</TH><TH>時刻</TH><TH>内容</TH>
EOB
# 規則的なテキストデータから1行ずつ入力変換して出力します。
while(<>){
    chop;
    @fd = split(/,/);
    print "<TR>\n<TD>$fd[0]</TD><TD>$fd[1]</TD><TD>$fd[2]</TD>\n</TR>\n";
}
# 残りの部分を出力します。
print "</TABLE>\n</BODY>\n</HTML>\n";
-----$ schetbl.pl

 もう少しこのスクリプトを汎用的に使えるように改良してみましょう。

 データの形式を次のようにします。

キャプションデータ
項目1,項目2,.....
表データ1,表データ2,.....
表データ1,表データ2,.....
.....


 最初にキャプションデータを読み込んでHTMLの最初の部分を出力、その次に項 目データを読み込んでHTMLを出力します。後は繰り返しの表データを次々に処理 して、最後にHTMLの終わりの部分を出力します。

 項目の数を任意にできるように変更しました。配列@arrayの最大の添え字は $#arrayとなりますので、これを利用しています。表データをHTMLに出力する場 合、最初の部分と最後の部分がだけが単純な繰り返しにはなりませんから、繰り 返し部分のみをfor文を使って出力しています。

 もちろん、スケジュールだけではなく、お好みのデータを表にして見ることが できます。

-----^ tbl2html.pl
chop($caption = <>); # 最初の行のキャプションデータを取得します。
# schedule.htmlの最初の部分をhere documentの手法で出力します。
# EOBの行までが変数置換を行って出力されます。これも便利ですね。
print <<"EOB";
<HTML>
<BODY>
<TABLE BORDER=7>
<CAPTION ALIGN=top><B>$caption</CAPTION>
EOB
# 二番目の行の表の項目データを取得して、HTMLを出力します。
chop($_ = <>);
@heads = split(/,/);
print "<TH>";
for($i=0; $i<$#heads; $i++){
    print "$heads[$i]</TH><TH>";
}
print "$heads[$#heads]</TH>\n";
# 規則的な表データから1行ずつ変換して出力します。
while(<>){
    chop;
    @fd = split(/,/);
    print "<TR>\n<TD>";
    for($i=0; $i<$#fd; $i++){
        print "$fd[$i]</TD><TD>";
    }
    print "$fd[$#fd]</TD>\n</TR>\n";
}
# 残りの部分を出力します。
print "</TABLE>\n</BODY>\n</HTML>\n";
-----$ tbl2html.pl

 今回はデータ形式を限定しましたが、さらに汎用化するためにはキャプション データや項目データをスクリプト内にデフォルトで保持できるようにしたり、別 テキストファイルから読みこむようにしたりということが考えられます。

 さらにはTABLEタグのオプションを様様に指定できるようにすることも簡単で しょう。

 無論、スクリプトの書き方もいろいろな方法が考えられます。上のスクリプト は1例に過ぎません。