メニューのページと、
日付や区分が載っている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でこういったものを見かけたことがあるという方がいらっしゃいましたら、
教えていただけると助かります。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (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>";
    • good
    • 0
この回答へのお礼

お返事遅れてまして、申し訳ありませんでした。
試してみました。
出来ました!!
ありがとうございます!!

お礼日時:2005/04/15 15:23

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桁にするにはどのように変更すればよろしいでしょうか?

補足日時:2005/04/15 15:31
    • good
    • 0

#1です



クローズし忘れました
最後に追加
close(XXX);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング