1

Rubyで扱いにくいファイルを処理する必要があります。特定のIDを指定すると、そのIDに関連付けられたデータが1つ以下のファイルに含まれることはわかっていますが、どちらのファイルかはわかりません。それはまた存在しないかもしれません、それは私が扱う必要があるエラー状態です。だから私はこのようなループを持っています:

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

だから私は2つの質問があります:

  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
4

1 に答える 1

3

Enumerable#findの代わりに、ブロックがtrueを返す#each最初のエントリを検索するか、またはを使用できます。したがって、これは次のようになります。filesnil

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
于 2013-03-25T05:25:29.713 に答える