Ruby 求助: 有关文件中一大段字符串 (多行注释字符) 的替换, 求优雅的解法

zw963 · 2012年03月24日 · 最后由 zw963 回复于 2012年03月25日 · 5051 次阅读

查找一个目录下的的所有扩展名为 rb 文件,删除文件中的一大段字符。

例如:

unused_str=%(<
multi-line text
multi-line text
>)





最好提供 raketask 的格式。

desc "delete unused string"
task :default do
  ...
end





当然也可以是 bash script 的形式,调用 Ruby API.

sed -i -e 's/junk//g' *.rb

#1 楼 @reus

用 sed, 多行文本很难写的。而且文本内容包含大量的单引号,双引号...

一点都不现实。单行文本呢,还凑合。

desc "删除一段文本"

task :default do
  files = Dir['**/*.rb']
  files.each do |file|
    tmp_str = File.read(file)
    tmp_str.gsub!(str, "")
    File.open(file, "w") do |f|
      f.write(tmp_str)
    end
  end
end

这是我丑陋的实现,怎么看怎么不像 Ruby 风格的代码,谁给个优雅一点的....

#3 楼 @zw963 不错,不考虑速度的话看起来像那么回事了。

#4 楼 @hhuai , 最近怎么不常见你啊~

你不在,都没人写那些超级奇怪的解决算法了,我真是很佩服你,除了代码风格不太注意以外,你写的代码我总是一眼,不,很多眼也看不懂的。可想而知你看过多少算法的书。偶连一本都没看过。

#5 楼 @zw963 我是 c 式写法,按你的进度,两个月就是牛人了。

def gsub_file(relative_destination, regexp, *args, &block)
  path = destination_path(relative_destination)
  content = File.read(path).gsub(regexp, *args, &block)
  File.open(path, 'wb') { |file| file.write(content) }
end

gsub_file 是 rails genenrator 的方法

rbfiles = File.join(directory ,'**', '*.'+'rb')
Dir.glob(rbfiles).each do |filename|`
# gsub_file here



#7 楼 @geekontheway 其实你这个真的没有楼主的可读性好

#7 楼 @geekontheway

我觉得你的比我的好,至少结构化比较清楚,不像我,一堆代码堆在一起。还暴露那么多临时变量。

#7 楼 @geekontheway

你那个 destination_path 方法是什么玩意儿?

#10 楼 @zw963 也是 rails generator 的

#11 楼 @geekontheway

放着 Ruby 自己的更简单的 API 不用,用 Rails 的?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号