Tail, start reading at EOF

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

Hi,

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

···

Am Mittwoch, 22. Aug 2007, 18:20:12 +0900 schrieb Rebhan, Gilbert:

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

/*
Hi,

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

···

-----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

Am Mittwoch, 22. Aug 2007, 18:20:12 +0900 schrieb Rebhan, 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://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

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