2016-05-01 8 views
0

Ruby/Cucumber/Calabashでテストを準備しています。私はログがいっぱいのテキストファイルを持っています。ログに特定の行/文が存在するかどうかを確認する必要があります。たとえば、「私の質問に答えてください。私は、すべての単語が独立して数回存在すると仮定しますが、この行では1回だけです。私は真を返す必要があります。私が試したとき、これまでのところ:ファイルにルビの特定の行が含まれているかどうかをチェックする方法

def check_file(file, string) 
    File.open(file) do |io| 
    io.each {|line| line.chomp! ; return line if line.include? string} 
    end 

    nil 
end 

、常にさえ、文字列は、(私はよく分からない、なぜ?)が存在しない働いて

私は配列は試してみてください?

+1

それはどのように今までに' true'をを返すだろうか?あなたは[IO.each]ではなく[Enumerable #find](http://ruby-doc.org/core-2.3.1/Enumerable.html#method-i-find)を使いたい(http:// ruby​​- doc.org/core-2.3.0/IO.html#method-i-each)文字列がファイル内に少なくとも1回存在するかどうかを知りたい場合は、 ( 'IO''は' Enumerable'をインクルードします。) –

+0

それがどのように呼び出されているかを表示できますか? –

答えて

1

ここでは、簡単にしたいことをする方法があります。あなたのものと同じように、一致したときには行を返し、存在しないときにはnilを返します。

def check_file(file, string) 
    File.foreach(file).detect { |line| line.include?(string) } 
end 

1.9.3-p551 :007 > check_file 'Gemfile', 'gem' 
=> "source 'https://rubygems.org'\n" 
1.9.3-p551 :008 > check_file 'Gemfile', 'gemxx' 
=> nil 
あなたは何が見つかったかどうかを確認するためにtruthinessためのメソッドの戻り値をテストすることができ

:最後の行は `nil`とき

if check_file(myfile, mystring) 
    # .... 
関連する問題