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 !!

¿Fue útil?

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)*?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top