WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:ログファイルの削除

0:[投稿] 霧 [2009/03/27 15:20 ] [環境:わからない わからない]

open(DAT,"+< ./log.txt");
flock(DAT, 2);
while(<DAT>){
push(@lines,$_);
}
foreach $line (@lines) {
if($line !~/$sakujo/) {
push(@new,$line);
}
}
truncate(DAT,0);
seek(DAT,0,0);
print DAT @new;
close(DAT);

$sakujo が含まれた文字列を全て消去するのは出来たのですが、
$sakujo が含まれた文字列の一行のみを削除するやり方を教えてください。


1:[回答] tk [2009/03/29 09:39 ]

仮に$sakujoが複数の行にある場合どの一行を削除するのでしょうか


2:[回答] 霧 [2009/03/29 17:39 ]

複数ある場合その中の一行のみを削除するという意味です


3:[回答] tk [2009/03/30 21:00 ]

その中の”ど の ”一行のみを削除するのかと質問したのですが^^; 
複数あるうちの一番先頭の行なのか一番最後の行なのかそれともそれ以外の何らかの条件に合致した行を削除するのかということです。


4:[回答] 霧 [2009/03/30 22:56 ]

すみません言葉不足でした。
どちらでも良いのですが、最後の行を削除することは出来ますか?


5:[回答] tk [2009/04/01 19:25 ]

たとえばこうとか
for ($i = $#line; $i >= 0; --$i) {
if($line[$i] =〜 /$sakujo/) {
splice @line ,$i,1;
last;
}
}


6:[回答] 霧 [2009/04/01 21:06 ]

その記述をどのように組み込めばよいのでしょうか?


7:[回答] tk [2009/04/03 01:44 ]

変更箇所は
foreach $line (@lines) {
if($line !~/$sakujo/) {
push(@new,$line);
}
}

for ($i = $#line; $i >= 0; --$i) {
if($line[$i] =~ /$sakujo/) {
splice @line ,$i,1;
last;
}
}


5のコードは@line自体を変更しているので
@newが必要なくなります。
print DAT @new;

print DAT @line;

回答(必須): 状態:

お名前(必須):

URL:




[戻る]