How can I open a file and search for a word inside it using Ruby?
+1
A:
File.readlines(file).each {|l| l.grep(/#{exp_search}/).each {|r| puts file + ' : ' + r}}
ennuikiller
2009-12-13 13:53:21
+1
A:
Something like this might help:
def word_exists_in_file
f = File.open("your_file.txt") #opens the file for reading
f.each do line
print line
if line.match /your_word_to_match/
return true
end
end
false
end
Ben Scheirman
2009-12-13 13:54:49
+6
A:
All presented solution have a time complexity of O(n). For simplicity I use String#include?
to check for the word. This could be done instead with a regular expression in the form string=~ regex
.
Read the complete file and search in it.
File.read(filename).include?(word)
If your file is very large, this is not an optimal solution, as you would read the complete file into memory and start searching afterwards. Your memory complexity is O(n)
Read the file line by line and search in each line
File.open(filename) do |f|
f.any? do |line|
line.include?(word)
end
end
If your file is very large, but you know your lines are short, you now have a memory complexity of O(1)
Read chunks of the file and search in it
File.open(filename) do |f|
tmp= f.read(1024)
next true if tmp.include?(word)
until f.eof?
tmp= tmp[(-1*word.size)..-1] + f.read(1024)
next true if tmp.include?(word)
end
next false
end
In this variant, we are reading equaly sized chunks from the file. So no matter what the conditions of the file are, our memory complexity is O(1)
johannes
2009-12-13 14:02:43
Wow, great explanation with much more depth than the original question. Thanks a lot for mini tutorial :)
Nikos D
2009-12-13 14:08:18