変数の置換を使用するjsファイルがありますが、逆に置換したいと思います。
ファイルには、置換に使用された「key-value」がすでに含まれているため、最初にそれらを抽出してから、置換を実行します。
これはファイルです(たとえば):
.......
//mapperstart
var pj = "shape", qj = "version", rj = "toFixed"; //this line is what I want to find
//mapperend
function (){
//32[rj](10);
}
......
//mapperstart
var kl = ll = "moveend", ml = "move", nl = "movestart"; //this line is what I want to find
//mapperend
......
'key-value'行の前後にコメントを追加し、次のルビーコードを使用して置き換えます。
def replaceVariable(fname)
content=IO.read(fname);
key_value={};
if(matchData=content.scan(/\/\/mapperstart(.+?)\/\/mapperend/m))
matchData.each do |md|
md=md[0].gsub(/\s+var\s+/,'').gsub(';','');
md_ary=md.split(',');
if(md_ary && md_ary.length>0)
md_ary.each do |kv|
if(kv.include?('='))
kv_pair=kv.split('=');
key=kv_pair[0].strip;
value=kv_pair[1].strip;
if(key_value.has_key?(key))
puts 'repeat key:'+key
else
key_value[key]=value
end
end
end
end
end
key_value.each do |key,value|
pattern=Regexp.new('['+key+']');
content.gsub!(pattern,value);
puts 'replace:'+key
end
ext_name=File.extname(fname);
puts ext_name
File.open(fname.gsub(ext_name,'')+"_fix"+ext_name,'aw') do |f|
f.puts content
end
end
end
replaceVariable('../file.js');
ただし、常にin 'gsub!': failed to allocate memory (NoMemoryError)
エラーが発生します。
それを修正する方法は?