Detecting the end of a text file

I'm just beginning to learn the Ruby progamming language, although I
have some previous programming experience in Java. I would like to
know if how I can detect the end of a file when parsing a text file in
Ruby. I don't want to throw an error or exception when I reach the end
of the file, I just want to tell my parser to stop parsing.

Thanks for the help.

The SketchUp Artist

File.open("filename") do |file|
  while line = file.gets
    puts line
  end
End

File.open in a block form such as above automatically closes the file neatly
at the end of the block.
The while loop inside the block assigns the next line from the file to the
variable "line".
When there is no next line to read because the end of file has been reached,
the variable will be set to nil. Since the variable, apart from being
assigned, is also evaluated as part of the condition of the while loop, and
since nil evaluates to false, no more lines will be read once EOF has been
reached.

HTH,

Felix

···

-----Original Message-----
From: sketchitup@gmail.com [mailto:sketchitup@gmail.com]
Sent: Wednesday, July 25, 2007 9:45 AM
To: ruby-talk ML
Subject: Detecting the end of a text file...

I'm just beginning to learn the Ruby progamming language,
although I have some previous programming experience in Java.
I would like to know if how I can detect the end of a file
when parsing a text file in Ruby. I don't want to throw an
error or exception when I reach the end of the file, I just
want to tell my parser to stop parsing.

Thanks for the help.

The SketchUp Artist

As far as I know, all the IO methods return nil on EOF except for
readline. You could read the file with:

File.open(path) do |f|
  while line=f.gets
      # parse
  end
end

or

File.open(path) do |f|
  begin
    loop do
      line = f.readline
      # parse
    end
  rescue EOFError
  end

or slurp the whole file with IO.readline(path)

···

On 7/25/07, sketchitup@gmail.com <sketchitup@gmail.com> wrote:

I'm just beginning to learn the Ruby progamming language, although I
have some previous programming experience in Java. I would like to
know if how I can detect the end of a file when parsing a text file in
Ruby. I don't want to throw an error or exception when I reach the end
of the file, I just want to tell my parser to stop parsing.

--
Luis Parravicini
http://ktulu.com.ar/blog/

Thanks for the responses Luis. I think I need to read a little more
about errors and exceptions in Ruby before I use your examples.

Thanks,

The SketchUp Artist

···

On Jul 25, 10:02 am, "Luis Parravicini" <lparr...@gmail.com> wrote:

On 7/25/07, sketchi...@gmail.com <sketchi...@gmail.com> wrote:

> I'm just beginning to learn the Ruby progamming language, although I
> have some previous programming experience in Java. I would like to
> know if how I can detect the end of a file when parsing a text file in
> Ruby. I don't want to throw an error or exception when I reach the end
> of the file, I just want to tell my parser to stop parsing.

As far as I know, all the IO methods return nil on EOF except for
readline. You could read the file with:

File.open(path) do |f|
  while line=f.gets
      # parse
  end
end

or

File.open(path) do |f|
  begin
    loop do
      line = f.readline
      # parse
    end
  rescue EOFError
  end

or slurp the whole file with IO.readline(path)

--
Luis Parravicinihttp://ktulu.com.ar/blog/