CGI-BBS > CGI > Perl > Perlの改造でログを新着順に表示したい。


カレッヂ
カレッヂ


質問者 あやか  投稿日 2005/6/18(土) 05:46:55
初めまして。超初心者です。
既に設置に成功したスクリプトなのですが、ログが
古い順に表示されてしまい、とても困っております。
これを新着順の表示に直したいのですが、何かいい
方法はないでしょうか?
初心者なので、どなたか助けて下さい。


-------------------------------------------------

sub open_file{
	my ($file) = @_;
	open (IN,"$file") || &error(1, "データファイルが開けません。");
	my @datas = <IN>;
	close (IN);
	return @datas;
}

-------------------------------------------------

スクリプトの「どの辺を抜いたらいいのか」さえも
良く分からないので、一応データファイルに関する
部分を抜いてみました。
見当外れな所を抜いていたら申し訳ありません。

それでは、宜しくお願い致します。

【習熟度】多少の設置経験

回答者 ユキ  [削除]  投稿日 2005/6/18(土) 11:13:20
始めまして。
参考になれば幸いです。^^

新しい順に表示するには一度、過去のデータを読み込み、そのデータの先頭へ新着データを
移動するといったカンジの作業で可能です。

# 掲示板のデータを読み込む

open(FILE, "<keiji.dat") || die "Open Error";

# 掲示板のデータを全て配列に代入します。

@all_data = <FILE>;

close(FILE);

# 配列の先頭に新着のデータを追加します。

unshift(@all_data, $new_data);

# データをもう一度開きます。(書き込み)

open(FILE, ">keiji.dat") || die "Open Error";

flock(FILE, 2);

# 過去のデータへ上書きします。

print FILE @all_data;

flock(FILE, 8);

close(FILE);

手順では、一度全てのデータを配列に代入→新しいデータをその先頭に代入
そして上書きといったカンジです。
質問者 あやか  [削除]  投稿日 2005/6/20(月) 15:04:47
レスありがとうございました。
遅くなってしまって、誠に申し訳ありません。

やはり私が抜き出した部分が間違っているのか、ユキ様の仰るように
改造しても巧く動きませんでした。(動作するけど新着順にならない)
親切に教えて頂いたのに、本当に申し訳ありません。

以下にスクリプト全文を載せました。
お手数ですが、よろしくお願い致します。

http://ayaka.daa.jp/koko.txt
回答者 ユキ  [削除]  投稿日 2005/6/22(水) 03:01:51
こんばんわ、返信遅くなり大変申し訳ないです。

スクリプトの方を見せてもらいました。^^

…が、私には難易度が少し高いですね、役不足かもしれませんね…。^^;

一応、見てみましたが

84行目から90行目までを書き換えてみ下さい。

open(LINES,"<$datafile") || die &error(1, "データファイルが開けないので、記録できません。");
@all_data = <LINES>;
close(LINES);

# 配列の先頭へ新規のデータを追加します。

unshift(@all_data, $value);

open(LINES, ">$datafile") || die &error(1, "データファイルが開けないので、記録できません。");

flock(LINES, 2);

# (新規データ+過去データ)をファイルに上書きする。
print LINES @all_data;

flock(LINES, 8):

close(LINES);


かなり自信が無いですが…。

まだ私も日が浅いのでこれぐらいしかお役に立ないようです。
勉強になります…。(__;

誰か上級者の方で見ている方がいましたら拝見してもらえないでしょうか?
私からもお願いしたいです。m(__)m
質問者 あやか  [削除]  投稿日 2005/6/22(水) 12:11:41
とても丁寧なレスをありがとうございました。
仰る通りの方法で、ばっちり新着順になりました♪
一時は設置を諦めようと思っていただけに、無事に
改造できて本当に嬉しいです。
これも、ユキ様の親切で丁寧なレスのおかげです。
本当にありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技