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