Ruby真是强大!!【在给定目录中搜寻包含指定字符串的文本文件】的最简解决方案

Ruby is really Niubility in some ways.

   《Programming Ruby 2ed》中文版这本书的源代码在网站上有下载,但是由于翻译过,并且代码很零碎,有1600多个源代码文件,而且源文件其中的页数已经与中文版的页数不相符了。为了搜索到包含指定的字符串的文件,决定用ruby自己动手写一个,经过多次重构,最后的代码如下:

class BriefExampleCodeFinder
  EXP_CODE_DIR="E:/MyCode/MyRubyCode/Programming Ruby/src"
  def locate(search_reg)
    result = Array.new
    Dir.foreach(EXP_CODE_DIR)\
     { |orgFile| result.push( EXP_CODE_DIR+'/'+orgFile) \    #向数组中置入符合条件的文件
      if (File.file?(EXP_CODE_DIR+'/'+orgFile) \      #判断是否为文件?有可能是目录
        && File.open(EXP_CODE_DIR+'/'+orgFile).grep(search_reg).length>0) }  #用正则表达式完成文件中内容的匹配
      return result
  end
end
其中红字部分在RUBY中作为一行代码处理,
看出来了么,两行代码搞定!!!
RUBY在文本处理和循环方面的能力真是厉害啊!!!

不过这样好像带来了可读性的问题,但是熟悉RUBY的语法之后,这些应该不是问题吧
p.s,可能有人会考虑到文件的打开和关闭涉及到的异常问题,在RUBY中,对File或IO来说,调用foreach后文件会自动关闭,不需要开发人员进行额外的处理。但是Dir.foreach,是否会自动关闭目录流或文件流呢?这个问题待考,也希望有高人知道的,说一声。
posted on 2007-07-04 16:39  小熊bryan  阅读(1397)  评论(0编辑  收藏  举报