[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

tail, start reading at EOF

Rebhan, Gilbert

8/22/2007 9:20:00 AM


Hi,

how to alter tail function to start at the end
of the file, not reading the lines already existing in file ? =

File = File.open(ARGV[0])
while File.exists?(file.path)
puts file.gets while !file.eof?
sleep(1)
end

Regards, Gilbert



3 Answers

Bertram Scharpf

8/22/2007 10:14:00 AM

0

Hi,

Am Mittwoch, 22. Aug 2007, 18:20:12 +0900 schrieb Rebhan, Gilbert:
> how to alter tail function to start at the end
> of the file, not reading the lines already existing in file ? =

file.seek 0, IO::SEEK_END

> File = File.open(ARGV[0])
> while File.exists?(file.path)
> puts file.gets while !file.eof?
> sleep(1)
> end

File#eof? does not work here. When the file has been
extended it still returns true even though File#gets will
return a String object.

Bertram


--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-...

Rebhan, Gilbert

8/22/2007 10:27:00 AM

0


-----Original Message-----
From: Bertram Scharpf [mailto:lists@bertram-scharpf.de]
Sent: Wednesday, August 22, 2007 12:14 PM
To: ruby-talk ML
Subject: Re: tail, start reading at EOF

/*
Hi,

Am Mittwoch, 22. Aug 2007, 18:20:12 +0900 schrieb Rebhan, Gilbert:
> how to alter tail function to start at the end
> of the file, not reading the lines already existing in file ? =

file.seek 0, IO::SEEK_END
*/

thanks, with your pointer and an older post by Robert Klemme
i have a working solution now =

def tail(file, interval=1)
raise "Illegal interval #{interval}" if interval < 0

File.open(file) do |io|
io.seek 0, IO::SEEK_END
loop do
while ( line = io.gets )
puts line
end
# uncomment next to watch what is happening
puts "-"
sleep interval
end
end
end

Anything to improve ?

Regards, Gilbert


Rob Biedenharn

8/22/2007 11:50:00 AM

0

On Aug 22, 2007, at 6:27 AM, Rebhan, Gilbert wrote:
> -----Original Message-----
> From: Bertram Scharpf [mailto:lists@bertram-scharpf.de]
> Sent: Wednesday, August 22, 2007 12:14 PM
> To: ruby-talk ML
> Subject: Re: tail, start reading at EOF
>
> /*
> Hi,
>
> Am Mittwoch, 22. Aug 2007, 18:20:12 +0900 schrieb Rebhan, Gilbert:
>> how to alter tail function to start at the end
>> of the file, not reading the lines already existing in file ? =
>
> file.seek 0, IO::SEEK_END
> */
>
> thanks, with your pointer and an older post by Robert Klemme
> i have a working solution now =
>
> def tail(file, interval=1)
> raise "Illegal interval #{interval}" if interval < 0
>
> File.open(file) do |io|
> io.seek 0, IO::SEEK_END
> loop do
> while ( line = io.gets )
> puts line
> end
> # uncomment next to watch what is happening
> puts "-"
> sleep interval
> end
> end
> end
>
> Anything to improve ?
>
> Regards, Gilbert

gem install file-tail

Then look at the rdoc for it. There's an example that does an
implementation of the Unix tail command. It's a lot more capable
that what you have here, but if you wanted to start some number of
lines before the EOF, the file-tail gem is really what you want.

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com