提前退出文件读取循环

时间:2013-03-25 05:19:54

标签: ruby loops file-io

我必须处理Ruby中一些笨拙的文件。给定一个特定的ID,我知道与ID相关的数据将在不超过一个的文件中,但我不确定是哪一个。它也可能不存在,这是我需要处理的错误状态。所以我有一个这样的循环:

files = ['a','b','c','d']
files.each do |filename|
  File.open(filename,'r') do |f|
    break unless contains_id(myid)
    do_stuff
  end
end

所以我有两个问题:

  1. 一旦找到包含我正在寻找的数据的文件,什么是摆脱循环的正确方法?

  2. 如何处理数据不在任何文件中的情况?

  3. 这是我提出的但感觉粗糙:

    files = ['a','b','c','d']
    found = false
    files.each do |filename|
      break if found
      File.open(filename,'r') do |f|
        break unless contains_id(myid)
        found = true
        do_stuff
      end
    end
    do_error_stuff unless found
    

1 个答案:

答案 0 :(得分:3)

您可以使用Enumerable#find代替#each来查找{0}中块返回true的第一个条目,或者files。所以这看起来像:

nil