• 締切済み

CGIから表生成(1行に数件のデータ)

現在、CGIからCSVファイルを読み込んでHTMLの表を生成しようと思っています。 1行に1件ずつforeachを使って表示することは出来ました。 ですが、1行に3件ずつ表示してから、次の行に移るといった処理の仕方がわかりません。 ですので処理の仕方を教えてもらえないでしょうか? よろしくお願いします。

みんなの回答

  • danmarino
  • ベストアンサー率63% (26/41)
回答No.2

泥臭いやり方ですが… $col = 10; #列数 print qq(<TABLE BORDER="1">\n); $i = 0; foreach $csvdata (@csvdata) { if (!$i) { print qq(<TR>\n);} print qq(<TD>$csvdata</TD>\n); $i++; if ($i == $col) { print qq(</TR>\n); $i = 0;} } if ($i != $col) { print qq(</TR>\n);} print qq(</TABLE>\n);

回答No.1

foreachは使いませんが・・・ これではどうでしょう #!/usr/local/bin/perl use strict; use CGI::Carp qw(fatalsToBrowser); use CGI; #表示用設定 my $query = new CGI; print $query->header(-charset=>'Shift_JIS'); #データ読み込み open(IN,'./test.csv'); my @csv=grep(chomp,<IN>); close(IN); #全部表に print '<table border="1">'; for my $row(0..$#csv){ print '<tr>'; my @csv1=split(/,/,$csv[$row]); for my $col(0..$#csv1){ print '<td>'.$csv1[$col].'</td>'; } print '</tr>'; } print '</table>'; #1,3,6番目の要素を表に print '<table border="1">'; for my $row(0..$#csv){ print '<tr>'; my @csv1=split(/,/,$csv[$row]); print '<td>'.$csv1[0].'</td>'; print '<td>'.$csv1[2].'</td>'; print '<td>'.$csv1[5].'</td>'; print '</tr>'; } print '</table>';