こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

複数の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に投入されるようになっているのも気になります。
どうしたら直るでしょうか。

投稿日時 - 2009-05-05 14:43:19

QNo.4933029

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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;
...

投稿日時 - 2009-05-06 06:54:10

ANo.2

現在は「CSV ファイルを読み込みながら HTML として出力」しているんだけど, それを「CSV ファイルを読み込んでから HTML として出力」するように変更する. CSV ファイルを読んで得たデータは配列かハッシュにでもいれておく. そうすればいろんな操作も簡単になる.
メモリに入りきらないほどの大きさだと問題になるけど, そんなものを HTML として出力されても意味はないだろうからその問題は無視.
最後の「ちなみに」以下は意味不明. 「CSVファイル名の20050504だけがtrに入るようになっています」ってどういう意味でしょうか? 見た感じでは「ファイル名」が常に最初に来るだけではないでしょうか.

投稿日時 - 2009-05-06 02:55:12

ANo.1

回答します。

私自身もあまりプログラムが得意ではないため、優秀な方のプログラムを参考にしながら、適当に直したり実験したりしながら使っていたり、作っています。

ご質問の件の場合、インターネット検索で次のキーワードを入力したところヒットした例を参考URLに書いておきます。

キーワード:Perl CSV 結合

では。

追伸
第2回目の連載で、CSVの結合について掲載されています。

参考URL:http://codezine.jp/article/detail/904?p=1

投稿日時 - 2009-05-05 15:13:09

あなたにオススメの質問