2012-02-02 87 views
0

到目前爲止,我還在學習Ruby,並在一個小寶石上工作,只要當前文件包含某個屬性(在我的情況下爲''),就可以執行某些操作。我看了一下File類的方法,從來沒有遇到任何我期待的東西。我意識到流行的Array方法.include?,我想知道是否有一種更大規模的方法,將它應用於File類。任何人都可以指出一個File類方法或腳本來做到這一點嗎?如何在Ruby的File類中使用.include?類似的方法?

例子:

# The Array class method scans the array for an item 
arr = ['foo', 'bar', 'baz'] 
if arr.include?('foo') 
    # (insert text) 
end 

我需要做什麼:

if File.include?('') 
    # My code 
end 

謝謝!

回答

3

請看:

if File.read(filename).include? str 
    # do your thing 
end 

注意:此代碼整個文件讀入內存中。你最好不要將它應用於大文件。

這是一種更有效的方法。

def my_include? filename, str 
    File.open(filename, "r") do |file| 
    file.each do |line| 
     return true if line.include?(str) 
    end 
    end 
    false 
end 
+0

感謝。然而,如果能夠在較大的文件中使用它,這將會很有用,但它會爲小事做些事。有沒有相對較快的方法使其不將_entire_文件存儲在內存中?非常感謝您的幫助,我現在可以製作我的寶石。 :) – beakr 2012-02-02 22:01:10

+0

@Beakr:更新了答案 – 2012-02-02 22:08:13

+0

非常感謝! :) – beakr 2012-02-02 22:35:09

0

這裏的另一種方式找到針對該文件的第一場比賽,並停在那裏,而不必讀取整個文件:

File.foreach(filename).enum_for(:grep, /foo/).first 
相關問題