※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。

■ カンマ区切りのデータを表組みにする

さて、「CGI(Perl)の予備知識」で、「文字列の分割」を解説しました。
そこで、今回はカンマで区切られたデータを表組みで表示する方法を解説します。
この処理を理解するには当然ですが、「HTML」の知識が必要になります。
解からない方は「HTMLの解説」で勉強してくださいね。

【 解    説 】

まず、カンマ区切りのデータを用意しましょう。
とりあえず、次のようなデータを用意しました。
$flist[0] = "0001,John,35"; $flist[1] = "0002,Kate,26"; $flist[2] = "0003,George,18";

次に、見出し部分のだけを「HTML」を使用して記述すると次のようになります。
<table border='1'> <tr> <th>No.</th> <th>名前</th> <th>年齢</th> </tr> </table>

これをヒアドキュメントで出力するには「CGI(Perl)の解説」で解説したとおり、次のようになります。 print << "END_OF_DOC"; <table border='1'> <tr> <th>No.</th> <th>名前</th> <th>年齢</th> </tr> </table> END_OF_DOC

さて、最初に用意したデータの中から1行ずつ順に取り出して「$strdat」にセットする方法には、「CGI(Perl)の解説」で解説した「foreach{}」を使い、次のように記述できます。
foreach $strdat (@flist){ }

その「$strdat」「,(カンマ)」で区切って変数「@strbuf」にセットするのは、「CGI(Perl)の予備知識」で解説したとおり「split()」関数を使って次のように記述できます。
@strbuf = split(/,/, $strdat);

取り出した「@strbuf」は項目単位に分かれてますから、3項目ありますのでこれを順に出力するには「for{}」文と「print」を使って次のように記述できます。
for $str0 (0..2){ print $strbuf[$str0]; }

さて、ここからです。
まず、項目はそれぞれひとつずつのセルで表示させますから前後に「<td>」タグと「</td>」タグを追加します。
したがって先ほどの記述を次のように変更します。
for $str0 (0..2){ print "<td>$strbuf[$str0]</td>\n"; }

そして、この前後に行である「<tr>」タグと「</tr>」タグを追加して、次のようにします。
print "<tr>\n"; for $str0 (0..2){ print "<td>$strbuf[$str0]</td>\n"; } print "</tr>\n";

最初に説明したヒアドキュメントの必要な部分を2つに分解して、これらの記述を挿入すれば出来上がりです。

では、上記の内容を使用して「カンマ区切りのデータ」を表組みにしてみます。

【記述サンプル】
#!/usr/bin/perl $flist[0] = "0001,John,35"; $flist[1] = "0002,Kate,26"; $flist[2] = "0003,George,18"; print << "END_OF_DOC"; <table border='1'> <tr> <th>No.</th> <th>名前</th> <th>年齢</th> </tr> END_OF_DOC foreach $strdat (@flist){ print "<tr>\n"; @strbuf = split(/,/, $strdat); for $str0 (0..2){ print "<td>$strbuf[$str0]</td>\n"; } print "</tr>\n"; } print "</table>\n";
◆実行結果について

上記のサンプルを「tblcsv.cgi」という名前で保存して実行してみてください。

実行結果はこちらをクリックしてください。
なお、実行結果については、各々のサーバーの環境、ユーザーの環境にによって内容は変わってきます。


page update:2010/01/23 20:32

Copyright (c) 2000-2009, all Rights Reserved & Produced by atom