在文件中searchstring的最佳方法是什么?
标题说明了自己。 我只想知道它是否存在,而不是它在哪里。 有没有一个class轮来实现这一目标?
File.open(filename).grep(/string/)
这将整个文件加载到内存中。 如果你正在处理大型文件,更喜欢sl them它们。
这意味着一次加载一行,而不是整个文件。
File.foreach(filename).grep(/string/)
清理垃圾是一个很好的做法,而不是让垃圾收集器在某个时候处理它。 如果你的程序是长寿的,而不仅仅是一些快速的脚本,这是更重要的。 使用代码块可确保在块终止时closuresFile
对象。
File.foreach(filename) do |file| file.grep(/string/) end
grep for foo或者bar或者baz,从ruby1line.txt中被盗。
$ ruby -pe 'next unless $_ =~ /(foo|bar|baz)/' < file.txt
那么看起来eed3si9n有一个class轮下来,这是更长的解决scheme:
f = File.new("file.txt") text = f.read if text =~ /string/ then #relevant code end
如果你的操作系统有一个grep包,你可以使用系统调用:
system("grep meow cat_sounds.txt")
如果grep
返回任何内容,则返回true,否则返回false。
如果您发现自己在一个使用grep
的系统上,可能会发现这是“最好的”方法,因为在文件操作方面Ruby可能会很慢。
这只读取文件的第一次出现的“string”,并逐行处理它 – 不是一次读取整个文件。
def file_contains_regexp?(filename,regexp) File.foreach(filename) do |line| return true if line =~ regexp end return false end