3

我在遍历文件的行时遇到了一些问题,似乎每个文件我只能使用 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

有什么我想念的吗

4

1 回答 1

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)

假内容

# 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"}
#=> ]
于 2013-07-26T19:40:27.867 回答