Rubí Cadena :: gsub! deteniéndose de forma inesperada
Pregunta
Estoy trabajando en un guión muy simple para limpiar un par de cientos de miles de pequeños archivos XML. Mi método actual es iterar a través del directorio y (para cada archivo) lee el archivo, String::gsub!
uso para hacer todos mis cambios (no estoy seguro si esto es lo mejor) y luego escribir el nuevo contenido en el archivo. Mi apariencia del código de algo como lo siguiente:
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
Esta apariencia todas fino y elegante, pero por alguna razón (que yo, por mi vida, no puedo imaginar) se bloquea el programa aparentemente arbitrariamente en los comandos gsub!
que son similares a los dos primeros se muestra. Sin embargo, se cuelga al azar (pero sólo en aquellos puntos). A veces funciona, otras veces es simplemente se cuelga. Realmente no puedo entender por qué iba a funcionar a veces, pero no todas las otras veces ???
Cualquier ayuda es muy apreciada !!
Solución
Sin saber nada más sobre su entorno, o el tipo de archivos que está leyendo, sugeriría tratando de hacer que sus estrellas Kleene a ser no codicioso. Al igual, el cambio (.|\s)*
a (.|\s)*?