2011-11-29 66 views
0
files = ["message_21.txt", "message_10.txt", "message_27.txt", "message_22.txt", "message_23.txt", "message_15.txt", "message_4.txt", "message_16.txt", "message_24.txt", "message_13.txt", "message_1.txt", "message_3.txt", "message_17.txt", "message_12.txt", "message_2.txt", "message_19.txt", "message_18.txt", "message_14.txt", "message_25.txt", "message_9.txt", "message_8.txt", "message_5.txt", "message_26.txt", "message_11.txt", "message_7.txt", "message_20.txt", "message_6.txt", "message_28.txt"] 

files.each do |f| 
file = File.new(PATH + "/" + f, "r") 
     while (line = file.gets) 
     @found=true if line =~ /You purchased/ 
     next unless @found 
     puts line 
     exit if line =~ /Order for/ 
    end 
    file.close 
end 

如果message_4.txt包含'您購買'和'訂單'的條款完全退出循環。所以我無法獲得包含這些條款的其他文件。我不知道我做了什麼錯誤。紅寶石戒指過早退出

回答

1

當你到達'Order for'時,你是否試圖擺脫while循環?因爲'退出'不是你要找的。嘗試'休息',而不是。您還需要爲每個文件重置您的@found變量。

files = ["message_21.txt", "message_10.txt", "message_27.txt", "message_22.txt", "message_23.txt", "message_15.txt", "message_4.txt", "message_16.txt", "message_24.txt", "message_13.txt", "message_1.txt", "message_3.txt", "message_17.txt", "message_12.txt", "message_2.txt", "message_19.txt", "message_18.txt", "message_14.txt", "message_25.txt", "message_9.txt", "message_8.txt", "message_5.txt", "message_26.txt", "message_11.txt", "message_7.txt", "message_20.txt", "message_6.txt", "message_28.txt"] 

files.each do |f| 
    @found = false 
    file = File.new(PATH + "/" + f, "r") 
    while (line = file.gets) 
    @found=true if line =~ /You purchased/ 
    # below skips to start of next run of while loop 
    next unless @found 
    puts line 
    # below breaks out of while loop 
    break if line =~ /Order for/ 
    end 
    file.close 
end 

看一看這個http://www.tutorialspoint.com/ruby/ruby_loops.htm - 尤其是「下一個」和「休息」的解釋。

+0

嘿,謝謝你的鏈接 – vinothini

0

exit退出整個程序,而不僅僅是循環。您需要break而不是exit來停止循環。

你也可以利用File.open接受一個塊,當塊返回時它將爲你關閉文件。

也不需要@found,除非您有意存儲在至少一個文件中至少找到一次You purchased行。

最後,您應該修正您的縮進,以便在每個級別使用兩個空格,正如Ruby社區中公認的標準一樣。

​​
+0

我試過'break'。如果我使用中斷顯示文件中的所有內容。但我需要「你購買」和「訂購」之間的界限。 – vinothini

+0

「訂購」行是否也包含「您購買」?如果沒有,循環將永遠不會到達'break if ...'行。 – meagar

+0

是的。這兩個詞彙存在於不同的行 – vinothini