我目前正在开发一个在特定文件夹中查找文件的脚本。我想复制这些文件。然后我想从那些重复文件中删除一些无用的行,用 YAML 解析它们(这是其中内容的格式)。最后对文件进行比较。
我最初想将它们复制到一个tmp
文件夹中,但我刚刚发现它的存在Tempfile
似乎正是我所需要的,因为在脚本完成其工作后必须删除临时文件。
我现在拥有的:
require 'Tempfile'
require 'YAML'
PWD = File.dirname(__FILE__)
LOCALES_FOLDER_PATH = "#{PWD}/../app/assets/javascripts/ayl/bo/config/locales"
LOCALES = ['en', 'fr']
files_data = {}
locale_file_names = LOCALES.map{|locale| "#{locale}.js.coffee"}
files = locale_file_names.map do |locale_file_name|
files_data[locale_file_name] = "#{LOCALES_FOLDER_PATH}/#{locale_file_name}"
end
locale_files = []
files.each do |file|
content = File.open(file).read
locale_file = Tempfile.open file.gsub("/", "_") do |f|
f.write content
f.flush
puts f.read
end
locale_files << locale_file
end
结果是:
± ruby diff_locales.rb
/Users/adrien/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/YAML.rb:48: warning: already initialized constant ENGINE
/Users/adrien/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/YAML.rb:69: warning: already initialized constant ENGINE
/Users/adrien/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/YAML.rb:73: warning: already initialized constant ENGINE
±
我的临时文件的内容是空的。
这对我来说似乎很奇怪。但我认为他们是我不知道/不理解的东西。
好的!弄清楚了!在块内,我必须在读取内容之前将光标移回文件的开头。