2013-07-26 99 views
3
我有一些問題通過文件的行迭代

,好像我只能在每個文件中使用each_line方法一旦file.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 

有什麼我失蹤

回答

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"} 
#=> ] 
+3

'file.rewind'也可以工作 – tessi

+0

感謝您的建議。我做了一個編輯。 – naomik

+0

太好了,謝謝! –