On Apr 27, 2006, at 6:20 PM, Eric Boucher wrote:

> Hi,
>
> I would like to know if there is a ruby way to achieve what I want to
> do. I want to be able to access the next iterator while reading a  
> file.
> Basically, I want to be able to collect the next 3 lines when I
> encounter a certain line:
>
> list = []
>
> File.open('toto.txt', 'rb') do |myFile|
> 	myFile.each {|line|
>
>     	    if line =~ /regExp/
>     	        list << line.nextIterator
>     	        list << line.nextIterator
>     	        list << line.nextIterator
>     	    end
> 	}
> end
> puts list
>
>
> This code is not working, I know. The method "nextIterator" doesn't
> exist. This is the way I see it, but I don't know how to do it. I  
> think
> that you can invode the method "next" on iterators in Python. I don't
> know how to do that without invoking the command 'next' with a flag  
> and
> a counter, a little bit like this code (which is not very rubyist):
>
> list = []
> flagIn = false
> counter = 3
>
> File.open('toto.txt', 'rb') do |myFile|
>     myFile.each {|line|
>
>         if line =~ /regExp/i
>             flagIn = true
>             next
>         end
>
>         if flagIn
>             list << line
>             counter -= 1
>             flagIn = false if counter == 0
>         end
>     }
> end
> puts list
>
>
> Any suggestions?
>
> Thanks
> -- 
> Posted with http://DevLists.com.  Sign up and save your mailbox.
>

This is totally untested but perhaps:
list = []
File.open(...) do |file|
     file.each do |line|
         if line =~ /regexp/
          3.times { list << file.gets }
     end
end