haoqi
October 24, 2009, 1:24pm
1
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
haoqi
October 24, 2009, 2:09pm
2
Hi –
On Sat, 24 Oct 2009, Haoqi H. wrote:
run=false
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
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 )
haoqi
October 24, 2009, 2:15pm
3
On 10/24/2009 01:24 PM, Haoqi H. wrote:
run=false
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.*.
Kind regards
robert
haoqi
October 24, 2009, 2:19pm
5
On Sat, 24 Oct 2009, Robert K. wrote:
unless ln
[“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 )