Я работаю над ОЧЕНЬ простым скриптом, чтобы очистить несколько сотен тысяч маленьких XML-файлов. Мой текущий метод состоит в том, чтобы перебирать каталог и (для каждого файла) читать файл, использовать String::gsub!
, чтобы внести все мои изменения (не уверен, что это лучше всего), а затем я пишу новое содержимое в файл. Мой код выглядит примерно так:Ruby 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!
команд, аналогичны показанным первым двум. Однако он зависает случайно (но только в тех точках). Иногда это работает, другие времена просто зависают. Я действительно не могу понять, почему это будет работать иногда, но не во все другие времена ???
Любая помощь очень ценится !!
Это работало на удивление хорошо, скрипт выполнен безупречно! Но не могли бы вы объяснить мне, что именно это произошло, я все еще не уверен, что происходит? Благодаря! – 2010-06-25 17:28:48
Подробнее см. Описания '*' и '*?' Здесь: http://www.regular-expressions.info/reference.html – bta
Соответствие «Жадный» начинается с максимально возможного совпадения и сжимает его до тех пор, пока он не найдет правильное совпадение. Совпадение «Lazy» начинается с наименьшего возможного совпадения и расширяет его. Например, возьмите строку 'abc" def "" ghi "jkl'. «Жалкое» регулярное выражение ''. * "' Будет соответствовать '' def "" ghi "' и 'lazy' regex '.. *?" 'Будет соответствовать' 'def' '. – bta