Я работаю над ОЧЕНЬ простым скриптом для очистки нескольких сотен тысяч маленьких XML-файлов. Мой текущий метод состоит в том, чтобы перебирать каталог и (для каждого файла) читать файл, использовать String::gsub!
, чтобы внести все мои изменения (не уверен, что это лучше), а затем я записываю новое содержимое в файл. Мой код выглядит примерно так:
Dir.entries('.').each do |file_name|
f = File.read( file_name )
f.gsub!( /softwareiconneedsshine>(.|\s)*<\/softwareiconneedsshine>/i, '' )
f.gsub!( /<rating>(.|\s)*<\/rating>, '' )
f.gsub!( /softwareIdentifiers>/, 'version_history>' )
#some more regex's
File.open( file_name, 'w' ) { |w| w.write(f) }
end
Все это выглядит прекрасно и изящно, но по какой-то причине (которую я, по жизни, не могу понять), программа, по-видимому, произвольно зависает над командами gsub!
, которые аналогичны первым двум показанным. Тем не менее, он зависает случайно (но только в этих точках). Иногда это работает, иногда просто зависает. Я действительно не могу понять, почему это будет работать иногда, но не все другие времена ???
Любая помощь очень ценится!