- 締切済み
複数のCSVファイルを1つの表にして出したい
あるCSVファイルを、Perl+HTMLで、プラウザに「表」で表示させるようにしました。 しかし、追加で複数のCSVファイルを読み込ませて、同じ表に入れることができません。(今ある表のなかの、$r1,2,3と番号が存在してる以外の空欄になっている表に入れたいのです) どのようにすればいいのか、どなたかお教え下さい!>< ちなみに、今作ってあるものはこんなかんじです。 動作確認済み。 #!/usr/local/bin/perl #----------------------------------- $file = "a.20090504.csv"; #----------------------------------- print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<br><br>\n"; print "<center>\n"; print "<table border=1 >\n"; $days = $file; $days =~ s/a.//g; $days =~ s/.csv//g; open(IN,"$file"); @kasou = <IN>; close(IN); foreach $line (@kasou){ ($r1, $r2, $r3, $r4, $r5, $r6, $r7) = split (/,/, $line); print "<tr>\n"; print "<td>$days</td>\n"; print "<td>$r1</td>\n"; print "<td></td>\n"; print "<td>$r2</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r3</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r4</td>\n"; print "<td>$r5</td>\n"; print "<td>$r6</td>\n"; print "<td>$r7</td>\n"; print "</tr>\n"; } print "</table>\n"; print "</body>\n"; print "</html>\n"; ※ちなみに、これですとCSVファイル名の20050504だけがtrに入るようになっています。これは、こうしたいのでこうしているのですが、繰り返しtrに投入されるようになっているのも気になります。 どうしたら直るでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kumoz
- ベストアンサー率64% (120/185)
1つの配列に格納してから、出力するという方法があります。$line1 は a.20090504.csv から読み込み、$line2 は他の csv から読み込むものとして、 $line1 = "1,2,3,4,5,6,7"; $line2 = "a,b,c,d,e"; $array[0] = "20090504"; @array[1, 3, 6, 9, 10, 11, 12] = split /,/, $line1; @array[2, 4, 5, 7, 8] = split /,/, $line2; print "<tr>\n"; print "<td>$_</td>\n" foreach @array; print "</tr>\n"; > ※ちなみに、これですとCSVファイル名の20050504だけがtrに入るようになっています。 > これは、こうしたいのでこうしているのですが、繰り返しtrに投入されるようになっているのも気になります。 > どうしたら直るでしょうか。 これは、csv の1行目のみ <td>$days</td> を出力して、2行目以降は <td></td> を出力したい ということなのでしょうか? 仮にそうだとして、次のような方法があります。 1) while ($line = <IN>) { ... $array[0] = $. == 1 ? $days : ""; ... 2) foreach $i (0 .. $#kasou) { ... $array[0] = $i ? "" : days; ...
- Tacosan
- ベストアンサー率23% (3656/15482)
現在は「CSV ファイルを読み込みながら HTML として出力」しているんだけど, それを「CSV ファイルを読み込んでから HTML として出力」するように変更する. CSV ファイルを読んで得たデータは配列かハッシュにでもいれておく. そうすればいろんな操作も簡単になる. メモリに入りきらないほどの大きさだと問題になるけど, そんなものを HTML として出力されても意味はないだろうからその問題は無視. 最後の「ちなみに」以下は意味不明. 「CSVファイル名の20050504だけがtrに入るようになっています」ってどういう意味でしょうか? 見た感じでは「ファイル名」が常に最初に来るだけではないでしょうか.
- kt1965
- ベストアンサー率34% (116/339)
回答します。 私自身もあまりプログラムが得意ではないため、優秀な方のプログラムを参考にしながら、適当に直したり実験したりしながら使っていたり、作っています。 ご質問の件の場合、インターネット検索で次のキーワードを入力したところヒットした例を参考URLに書いておきます。 キーワード:Perl CSV 結合 では。 追伸 第2回目の連載で、CSVの結合について掲載されています。