file.each_line只能调用一次

时间:2013-07-26 19:36:48

标签: ruby iteration

我在迭代文件的行时遇到一些问题,似乎每个文件只能使用一次each_line方法

file = open_file(path)
file.each_line { puts "Q"}
puts "--"
file.each_line { puts "Q"}
puts "--"
file.each_line { puts "Q"}
puts "--"
file.each_line { puts "Q"}

#Output: (on a file with three lines in it )
#Q
#Q
#Q
#--
#--
#--

使用常规迭代器

可以正常工作
3.times { puts "Q"}
puts "--"
3.times { puts "Q"}
puts "--"
3.times { puts "Q"}
puts "--"
3.times { puts "Q"}

#Output: (on a file with three lines in it )
#Q
#Q
#Q
#--
#Q
#Q
#Q
#--
#Q
#Q
#Q
#--
#Q
#Q
#Q

我有什么遗失

1 个答案:

答案 0 :(得分:6)

您必须使用file#seek

重置文件的阅读位置

试试这个

file.each_line &method(:puts)
file.seek 0
file.each_line &method(:puts)

根据评论,以下内容也适用

file.each_line &method(:puts)
file.rewind
file.each_line &method(:puts)

Dummie内容

# users.json
[
  {"name": "bob"},
  {"name": "alice"}
]

红宝石

# output.rb
file = File.open("users.json")
file.each_line &method(:puts)

#=> [
#=>   {"name": "bob"},
#=>   {"name": "alice"}
#=> ]

file.seek 0
#=> 0

file.each_line &method(:puts)
#=> [
#=>   {"name": "bob"},
#=>   {"name": "alice"}
#=> ]