How to open a file and search for a word?

后端 未结 4 1300
温柔的废话
温柔的废话 2021-02-02 00:28

How can I open a file and search for a word inside it using Ruby?

相关标签:
4条回答
  • 2021-02-02 01:12

    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 upperbounded by a constant value, 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)

    0 讨论(0)
  • 2021-02-02 01:14

    Try gem 'search_in_file', it helps you to search word of phrase in specified file or in many files by path

    0 讨论(0)
  • 2021-02-02 01:21

    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
    
    0 讨论(0)
  • 2021-02-02 01:29
    File.readlines(file).each {|l| l.grep(/#{exp_search}/).each {|r| puts file + ' : ' + r}}
    
    0 讨论(0)
提交回复
热议问题