我必须用 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
来查找 block 返回 true 的 files
中的第一个条目,否则无
。所以这看起来像:
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
关于ruby - 提前退出的文件读取循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608150/