- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォルダ内の最新ログの取り出し方)
フォルダ内の最新ログの取り出し方
このQ&Aのポイント
- logフォルダ内の最新ログを取得する方法について
- logフォルダ内の最新ログを自動的に更新する方法について
- 日記のログには記事毎に割り振られたナンバーがあり、最新ナンバーはnum.txtに記録されている
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「自動的に更新する」と思うからいけないのであって, 「実行時に動的にファイル名を取得する」と思えばいい. このファイル名形式がそのまま続くのであれば, 例えば $logdir = "./log"; opendir(DIR, $logdir); $latest = (sort { $b <=> $a; } grep { /^\d+\.txt$/; } readdir DIR)[0]; closedir(DIR); open(FILE, "$logdir$latest"); なんかでできないか?
お礼
できました! ◆こちらのページの、この部分を参考にさせていただき http://perl.misty.ne.jp/12.html ● 特定の種類のファイル名のみを取得 open DIR "temp"; @files = grep { /\.html$/ } readdir DIR; ← HTMLファイルのみ取得 close DIR; ◆下記のように変更 14 opendir(DIR, "./log/"); 15 @file = grep { /\.txt$/ } readdir(DIR); 16 closedir(DIR); 17 foreach (@file) { 18 print "$_\n"; 19 } *** 表示結果 *** 200805.txt 200906.txt 200907.txt num.txt ◆ sort { $b <=> $a; }を追加 15 @file = sort { $b <=> $a; } grep { /\.txt$/ } readdir(DIR); *** 表示結果 *** 200907.txt 200906.txt 200805.txt num.txt ◆[0]を追加 17 foreach (@file[0]) { *** 表示結果 *** 200907.txt ◆以下のように変更。無事、望みどおりの表示をしてくれました 14 opendir(DIR, "./log/"); 15 @file = sort { $b <=> $a; } grep { /\.txt$/ } readdir(DIR); 16 closedir(DIR); 17 open(FILE, "./log/@file[0]"); 18 my @file = <FILE>; 19 close(FILE); ◆最後に気がかりなのは「use strict;」を追加すると下記のエラーが出てしまいます。 Software error: Global symbol "@file" requires explicit package name at C:\www\home\sfs4_diary\diary3.cgi line 14. Global symbol "@file" requires explicit package name at C:\www\home\sfs4_diary\diary3.cgi line 16. Execution of C:\www\home\sfs4_diary\diary3.cgi aborted due to compilation errors. For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. こちらのについてはゆっくり考えたいと思います。 とりあえず解決いたしましたのでご報告にあがりました。 あなたのヒントが無ければできませんでした。 本当にありがとうございました。
補足
ご回答有り難うございます。 早速やってみたのですが、ログがない状態の物が表示されました。 でも、とてもヒントになりました!有り難うございます。 取りあえず $latest = (sort { $b <=> $a; } grep { /^\d+\.txt$/; } readdir DIR)[0]; この部分が何をしているのか何となくしか分かっていないので、調べたいと思います。 もし自己解決できましたら、結果報告に来させていただきます。 この間お世話になったばかりですのに、再度相手にしてくださり本当に有り難うございます。