用Ruby替换魔兽世界toc文件版本号

玩魔兽世界的同学都知道,当WoW升级后,插件也需要升级。但是有些插件其实没有影响,只是需要把toc文件里面的版本号改成新的就好。这几天刚好国服从3.2.2升级到了3.3.5,这样toc里面的版本号就需要从30200改成30300 (虽然有些改了也用不了)

然后我就想到用ruby实现这个应该不难,早上起来就开始写了。其实很简单,只是自己对ruby的应用还不纯熟。。。现在终于完工了

代码如下:

# toc_ver.rb
# change version number of toc to what you wanted
if ARGV.length != 2 || ARGV.last !~ /[0-9]{5}/ || !File.directory?(ARGV.first)
 puts "Error: two arguments should be used. If your path contains spaces, using quotes" if ARGV.length !=2
 puts "Error: specified directory not found" if File.directory?(ARGV.first)
 puts "Error: version number should be 5 digits" if ARGV.last !~ /[0-9]{5}/
 puts usage=<<USAGE
Usage: toc_ver.rb path_of_Addons version_number
Example: toc_ver.rb "E:\\World of Warcaft\\Interface\\Addons" 30300
USAGE
exit
end

Dir.chdir(ARGV.first)
tocfiles= File.join("**","*.toc")
Dir.glob(tocfiles) do |filename|
#save the file lines in an array; substitution; overwrite the original file
file_array=File.readlines(filename).each {|line| line.gsub!(/## Interface: [0-9]{5}/, "## Interface: #{ARGV.last}") }
 File.open(filename,'w') do |file|
 file_array.each {|line| file.puts(line)}
 end
end

把上面代码保存为toc_ver.rb使用方法: toc_ver.rb [Addons的路径] [要修改的版本号]。
如 toc_ver.rb “E:\World of Warcaft\Interface\Addons” 30300
注意,如果路径有空格的话需要加引号。

浪费的时间主要是想:打开一个文件,然后读入每行。找到要修改的行,替换。
这种想法是不行的,不能对一个文件同时读+修改。所以我还是先把每行读到一股数组,修改完之后再把数组写入。可以参见Stackedoverflow的讨论。那个正确答案是错的,File.read返回的是File对象而不是String

Advertisements