- ベストアンサー
CSVを読み込んでメニューを作成する方法
メニューのページと、 日付や区分が載っているCSVがあります。 data.csvのレコード 2005/04/01 一般 2005/04/08 特別 2005/04/15 一般 このCSVを自動的に読み込んで、「一覧」をクリックすると、 該当の日付の一覧に飛ぶというページを作りたいのですが、 どういう風に作成すれば良いかわかりませんでした。 どなたかわかる方がいらっしゃいましたら、アドバイスを頂きたいのですが。 毎回HTMLの日付とリンクを更新すれば出来るのですが、 CSVの入れ換えだけで実現出来るようにしたいです。 下のタグがメニューの一部です。 2005/04/01や2005/04/08といった部分をCSVが読み込んで作成し、 一般や特別などの項目、一覧のリンクの"050401/index.html"という部分も自動的に作成出来るようにしたいです。 <table border="0" cellpadding="5" cellspacing="2"> <tr> <td>2005/04/01</td> <td>一般</td> <td><a href="050401/index.html">一覧</a></td> </tr> <tr> <td>2005/04/08</td> <td>特別</td> <td><a href="050408/index.html">一覧</a></td> </tr> <tr> <td>2005/04/15</td> <td>一般</td> <td><a href="050415/index.html">一覧</a></td> </tr> </table> 自分ではこういった方法しか思い浮かばなかったのですが、 メニューを自動的に作りたいというのが趣旨です。 他の方法でも出来るのであればご指導頂きたいです。 CGIの知識はカスタマイズ程度の知識しかありませんので、 もしこちらに記載できるようなソースであれば書いていただけると大変助かります。 もしくは、フリーのCGIでこういったものを見かけたことがあるという方がいらっしゃいましたら、 教えていただけると助かります。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
かなり適当です サンプル程度に。 #!/usr/bin/perl print "Content-type: text/html\n\n"; open( XXX,"./data.csv" ); @LIST=<XXX>; print "<table border=\"1\" cellpadding=\"5\" cellspacing=\"2\">"; for($i=0;$i<@LIST;$i++){ @LINE=split(/\,/,@LIST[$i]); @DAY=split(/\//,@LINE[0]); $YEAR=substr(@DAY[0],2,2); $DIR=$YEAR.@DAY[1].@DAY[2]; print "<TR>"; print "<TD>@LINE[0]</TD><TD>@LINE[1]</TD><TD><A HREF=\"$DIR/index.html\">一覧</A ></TD>"; print "</TR>"; } print "</TABLE>";
その他の回答 (2)
- Ethersky
- ベストアンサー率71% (168/235)
HTTPヘッダの出力とかは省略してますが一番シンプルでメモリ節約で書くと・・・ open(IN,"./hoge.csv"); print qq|<table border="0" cellpadding="5" cellspacing="2">\n|; while(<IN>){ #一行ずつ読む chomp; #改行を取り除く ($date,$title) = split(/,/); #年月日とタイトルを分ける(区切りは「カンマ(,)区切り」と仮定) ($date_uri = $date) =~ tr/\///d; #年月日の/を取り除く print qq|<tr>\n<td>$date</td>\n<td>$title</td>\n<td><a href="$date_uri/index.html">一覧</a></td>\n</tr>|; } print "</table>\n"; close(IN);
補足
ありがとうございます。 試してみました。出来ました! 開くフォルダの名前が20050401や20050408などのフォルダになってしまうのですが、 050401など、年度の部分を2桁にするにはどのように変更すればよろしいでしょうか?
- mendokusa
- ベストアンサー率13% (359/2726)
#1です クローズし忘れました 最後に追加 close(XXX);
お礼
お返事遅れてまして、申し訳ありませんでした。 試してみました。 出来ました!! ありがとうございます!!