提前退出文件读取循环
问题描述:
我必须处理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
所以我有两个问题:
一旦我发现,包含数据我的文件什么是打出来的循环的正确方法在找什么?
我该如何处理数据不在任何文件中的情况?
这是我想出了但感觉粗糙:
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
答
可以使用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