Can you implement a better IO#each_lines?

like this,thanks
#!/usr/bin/env ruby
class IO
  def each_lines(n)
    run=true
    while run
      lines=[]
      n.times{
         ln = self.gets
         unless ln
          run=false
          break
          else
            lines<<ln.chomp
        end
      }
      yield lines unless lines.empty?
    end
  end
end

open(__FILE__) do |f|
   f.each_lines(3) do |lines|
     p lines
   end
end

···

--
Posted via http://www.ruby-forum.com/.

Hi --

like this,thanks
#!/usr/bin/env ruby
class IO
def each_lines(n)
   run=true
   while run
     lines=
     n.times{
        ln = self.gets
        unless ln
         run=false
         break
         else
           lines<<ln.chomp
       end
     }
     yield lines unless lines.empty?
   end
end
end

open(__FILE__) do |f|
  f.each_lines(3) do |lines|
    p lines
  end
end

require 'enumerator' # if necessary
open(__FILE__) do |f|
    f.each_slice(3) do |lines|
      p lines
    end
end

:slight_smile:

David

···

On Sat, 24 Oct 2009, Haoqi Haoqi wrote:

--
The Ruby training with D. Black, G. Brown, J.McAnally
Compleat Jan 22-23, 2010, Tampa, FL
Rubyist http://www.thecompleatrubyist.com

David A. Black/Ruby Power and Light, LLC (http://www.rubypal.com)

There is no need to implement anything. You can use #each_slice:

robert@fussel:~$ seq 1 10 | ruby1.9 -e '$stdin.each_slice(3) {|l| p l}'
["1\n", "2\n", "3\n"]
["4\n", "5\n", "6\n"]
["7\n", "8\n", "9\n"]
["10\n"]
robert@fussel:~$

This works in 1.8.7 and 1.9.*.

Kind regards

  robert

···

On 10/24/2009 01:24 PM, Haoqi Haoqi wrote:

like this,thanks
#!/usr/bin/env ruby
class IO
  def each_lines(n)
    run=true
    while run
      lines=
      n.times{
         ln = self.gets
         unless ln
          run=false
          break
          else
            lines<<ln.chomp
        end
      }
      yield lines unless lines.empty?
    end
  end
end

open(__FILE__) do |f|
   f.each_lines(3) do |lines|
     p lines
   end
end

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

And 1.8.6 if you require 'enumerator'.

David

···

On Sat, 24 Oct 2009, Robert Klemme wrote:

On 10/24/2009 01:24 PM, Haoqi Haoqi wrote:

like this,thanks
#!/usr/bin/env ruby
class IO
  def each_lines(n)
    run=true
    while run
      lines=
      n.times{
         ln = self.gets
         unless ln
          run=false
          break
          else
            lines<<ln.chomp
        end
      }
      yield lines unless lines.empty?
    end
  end
end

open(__FILE__) do |f|
   f.each_lines(3) do |lines|
     p lines
   end
end

There is no need to implement anything. You can use #each_slice:

robert@fussel:~$ seq 1 10 | ruby1.9 -e '$stdin.each_slice(3) {|l| p l}'
["1\n", "2\n", "3\n"]
["4\n", "5\n", "6\n"]
["7\n", "8\n", "9\n"]
["10\n"]
robert@fussel:~$

This works in 1.8.7 and 1.9.*.

--
The Ruby training with D. Black, G. Brown, J.McAnally
Compleat Jan 22-23, 2010, Tampa, FL
Rubyist http://www.thecompleatrubyist.com

David A. Black/Ruby Power and Light, LLC (http://www.rubypal.com)

great~thank you!

···

--
Posted via http://www.ruby-forum.com/.