2012-02-02 41 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 
相关问题