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.*. And 1.8.6 if you require 'enumerator'. David -- 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)