Logを整理するには?

[上に] [前に] [次に]
徒歩 1999/12/09(木) 16:45:16
始めまして。
始めて投稿させて頂きます。
Logに何かを記録しようと思い、
http://www.tohoho-web.com/wwwperl1.htm#OutputFile
を読ませていただきました。
が、その方法でやると、

>   ファイルに追加書き込みするには次のようにします。
>   open(OUT, ">> datafile.txt");
>   print(OUT "こんにちわ\n");
>   close(OUT);

1番新しい、記録が下のほうになってしまいます。
しかし、掲示板やChatを見ると、みんな新しいものは上に記録しています。

結論・・・
ログに記録するときに、新しい記録分を上に出来ないか、
ということです。

よろしくお願いします。
では

徒歩 1999/12/09(木) 16:54:17
実行イメージ

現状

記録 by 16:40
記録 by 16:41
・・・16:47
・・・16:50

対処後

・・・16:50
・・・16:47
記録 by 16:41
記録 by 16:40

J.Naka 1999/12/09(木) 17:05:04
今のログ記録方式を図解すると、

ファイル先頭<--   -->ファイル後端
[No.1][No.2][N0.3]
新しいデータ [New] を過去ログの後部にアペンドして
[No.1][No.2][No.3][No.4]

を、
ファイル先頭<--   -->ファイル後端
[No.3.[No.2][No.1]
新しいデータ [New] の後ろに過去のログをアペンド
[No.4][No.3][No.2][No.1]

となれば良いわけですね。
アペンド先が変わるだけって事。

徒歩 1999/12/09(木) 17:10:50
すばやいレスありがとうございます。
そうです。
そのとおりです。

徒歩 1999/12/09(木) 17:59:23
アぺンド先を変えるには?
どうしたらよいのでしょうか?
と言う質問に変更・・・(^^;
よろしくお願いします。

B-Cus 1999/12/09(木) 18:10:26
 open(IN,"file");
 @buf=<IN>;
 close(IN);

 open(OUT,">file");
 print OUT "newdata";
 print OUT @buf;
 close(IN);
とか
 open(OUT,">tmp");
 print OUT "newdata";

 open(IN,"file");
 while (<IN>){
  print OUT $_;
 }
 close(IN);
 close(OUT);
 rename("tmp","file");
とか。

徒歩 1999/12/09(木) 18:21:59
[[解決]]
ありがとうございました。
出来ました。
ここで質問して良かったです。

ところで、
2つありますが、どちらの方が良いんでしょうね・・・。
では。

J.Naka 1999/12/09(木) 18:48:57
B-Cusさんの二つのルーチンのメリット&デメリットは、

処理の簡易さでは、上のルーチンが良いです。
ログファイルが消えたりする可能性の少なさという安全性では、下のルーチンが良いです。

重要でないログファイルならば、上のルーチン。
大事なログファイルならば、下のルーチン。

徒歩 1999/12/09(木) 18:56:16
[[解決]]
なるほど。
よくわかりました。
J.Naka引き続きありがとうございました。
ではー(^^)

[上に] [前に] [次に]