【问题标题】:file.each_line can only be called oncefile.each_line 只能调用一次
【发布时间】:2013-07-27 05:02:58
【问题描述】:

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

我有什么遗漏

【问题讨论】:

    标签: ruby iteration


    【解决方案1】:

    您必须使用 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"}
    #=> ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多