require 'tempfile'
dir = ARGV.shift
before_word = /\/\/.*/ # 正規表現
after_word = '' # 置換文字列
class DirSub
def initialize(dir, before_word, after_word)
@list = []
dirlist(dir).each{|file|
p file
substitute(file, before_word, after_word)
}
end
def dirlist(dir)
d = open(dir)
d.each{|f|
next if f == '.' || f == '..'
fullpath = "#{dir}/#{f}"
if directory?(fullpath)
dirlist(fullpath)
else
@list << fullpath if extname(fullpath) == '.c' || extname(fullpath) == '.cpp'
end
}
d.close
return @list
end
def substitute(file, before_word, after_word)
# 一時ファイルを作成
temp = Tempfile::new(file)
open(file, "r"){|f|
f.read.each{|line|
# ファイルの中身を置換
line.gsub!(before_word, after_word)
# 一時ファイルに出力
temp.puts(line)
}
}
temp.close
# 一時ファイルを再オープン
temp.open
# 一時ファイルの内容で上書きする
open(file, "w"){|f|
p file
temp.each{|line|
puts line
f.puts(line)
}
}
# 作成した一時ファイルを削除
temp.close(true)
end
end
DirSub::new(dir, before_word, after_word)
cmVxdWlyZSAndGVtcGZpbGUnCgpkaXIgPSBBUkdWLnNoaWZ0CmJlZm9yZV93b3JkID0gL1wvXC8uKi8gICMg5q2j6KaP6KGo54++CmFmdGVyX3dvcmQgPSAnJyAJCSMg572u5o+b5paH5a2X5YiXCgpjbGFzcyBEaXJTdWIKICBkZWYgaW5pdGlhbGl6ZShkaXIsIGJlZm9yZV93b3JkLCBhZnRlcl93b3JkKQogICAgQGxpc3QgPSBbXQogICAgZGlybGlzdChkaXIpLmVhY2h7fGZpbGV8CiAgICAgIHAgZmlsZQogICAgICBzdWJzdGl0dXRlKGZpbGUsIGJlZm9yZV93b3JkLCBhZnRlcl93b3JkKQogICAgfQogIGVuZAoKICBkZWYgZGlybGlzdChkaXIpCiAgICBkID0gb3BlbihkaXIpCgogICAgZC5lYWNoe3xmfAogICAgICBuZXh0IGlmIGYgPT0gJy4nIHx8IGYgPT0gJy4uJwogICAgICAKICAgICAgZnVsbHBhdGggPSAiI3tkaXJ9LyN7Zn0iCiAgICAgIAogICAgICBpZiBkaXJlY3Rvcnk/KGZ1bGxwYXRoKQogICAgICAgIGRpcmxpc3QoZnVsbHBhdGgpCiAgICAgIGVsc2UKICAgICAgICBAbGlzdCA8PCBmdWxscGF0aCBpZiBleHRuYW1lKGZ1bGxwYXRoKSA9PSAnLmMnIHx8IGV4dG5hbWUoZnVsbHBhdGgpID09ICcuY3BwJwogICAgICBlbmQKICAgIH0KICAgIGQuY2xvc2UKICAgIAogICAgcmV0dXJuIEBsaXN0CiAgZW5kCgogIGRlZiBzdWJzdGl0dXRlKGZpbGUsIGJlZm9yZV93b3JkLCBhZnRlcl93b3JkKQogIAkjIOS4gOaZguODleOCoeOCpOODq+OCkuS9nOaIkAogICAgdGVtcCA9IFRlbXBmaWxlOjpuZXcoZmlsZSkKICAgIAogICAgb3BlbihmaWxlLCAiciIpe3xmfAogICAgICBmLnJlYWQuZWFjaHt8bGluZXwKICAgICAgCSMg44OV44Kh44Kk44Or44Gu5Lit6Lqr44KS572u5o+bCiAgICAgICAgbGluZS5nc3ViIShiZWZvcmVfd29yZCwgYWZ0ZXJfd29yZCkKICAgICAgICAjIOS4gOaZguODleOCoeOCpOODq+OBq+WHuuWKmwogICAgICAgIHRlbXAucHV0cyhsaW5lKQogICAgICB9CiAgICB9CiAgICAKICAgIHRlbXAuY2xvc2UKICAgICMg5LiA5pmC44OV44Kh44Kk44Or44KS5YaN44Kq44O844OX44OzCiAgICB0ZW1wLm9wZW4KICAgIAogICAgIyDkuIDmmYLjg5XjgqHjgqTjg6vjga7lhoXlrrnjgafkuIrmm7jjgY3jgZnjgosKICAgIG9wZW4oZmlsZSwgInciKXt8ZnwKICAgICAgcCBmaWxlCiAgICAgIHRlbXAuZWFjaHt8bGluZXwKICAgICAgICBwdXRzIGxpbmUKICAgICAgICBmLnB1dHMobGluZSkKICAgICAgfQogICAgfQogICAgIyDkvZzmiJDjgZfjgZ/kuIDmmYLjg5XjgqHjgqTjg6vjgpLliYrpmaQKICAgIHRlbXAuY2xvc2UodHJ1ZSkKICBlbmQKZW5kCgpEaXJTdWI6Om5ldyhkaXIsIGJlZm9yZV93b3JkLCBhZnRlcl93b3JkKQ==