Each roll-over in File?

fellow, Rubyists:

I have the following code in a PDF writer using Prawn on Ruby 1.8.7 p249
(Default on Ubuntu 10.04). My problem is that the

 @src_file.each do | line |
    ...
 end

… block appears to be rolling over and repeating lines from the
beginning
of the file. I tried to use p330 but due to Debian’s known …
eccentricities… it won’t load my ruby gems.

                @src_file = File.open @src_fn
                Prawn::Document.generate( @out_fn ) do | pdf |
                    @next = true
                    @src_file.each do | line |
                        while @lines_to_do < 1 do
                            update_state_n_format( pdf )
                            @next = true if @lines_to_do <= 0
                        end
                        process_line( line, pdf )
                        @lines_to_do -= 1
                    end
                    @src_file.close
                end

Is this a known issue? Or already fixed?

On Wed, Jan 19, 2011 at 5:56 PM, Don W. [email protected] wrote:

… block appears to be rolling over and repeating lines from the beginning
of the file.

@src_file.each do | line |
while @lines_to_do < 1 do
update_state_n_format( pdf )
@next = true if @lines_to_do <= 0
end
process_line( line, pdf )
@lines_to_do -= 1
end

Are you positive that nothing in update_state_n_format() or
process_line() is touching @src_file and perhaps rewinding the file’s
read position?

Wondering,
Aaron out.

On Wed, Jan 19, 2011 at 6:34 PM, Aaron D. Gifford
[email protected]wrote:

On Wed, Jan 19, 2011 at 5:56 PM, Don W. [email protected] wrote:

[snip]

Are you positive that nothing in update_state_n_format() or
process_line() is touching @src_file and perhaps rewinding the file’s
read position?

I did figure it out. Above this code is a line that says

close if @done == true

… the close being a wxRuby close(), and it was actually coming back
from
the close() and re-opening the file and crashing before the close()
completed all its operations at the Wx level.

Changing it to

if @done == true then
close
else
# parse the file
end

…worked.

In other words, close() != die() :smiley: