3

ファイルの行を繰り返し処理する際に問題が発生しています。each_line メソッドはファイルごとに 1 回しか使用できないようです

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 に答える