2013-03-25 80 views
1

我必須處理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. 我該如何處理數據不在任何文件中的情況?

這是我想出了但感覺粗糙:

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 

回答

3

可以使用Enumerable#find代替#each找到files中的第一項,該塊返回true,否則nil 。所以這看起來像:

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