Hola de nuevo
Me surge un problema en la parte:
elsif(ARGV[0])=="-f"
featuring()
`block in featuring': undefined method
`+' for nil:NilClass (NoMethodError)
Me dice que no he definido el método, ¿Porque es tán cruel conmigo? :-(
# -*- coding: UTF-8 -*-
# Métodos
def reset()
renamed = 0
total = -1
end
def resultado()
puts "Procesados: #{total} archivos"
puts "Renombrados: #{renamed} archivos"
end
def featuring()
Find.find(ARGV[1].gsub("\\", "/")) { |path|
path = path.encode('utf-8')
if path[" ft. "] then
File.rename(path, path.gsub(" ft. ", " feat. "))
rename += 1
end
total += 1
}
end
# Argumentos
if (ARGV[0])==()
help()
elsif(ARGV[0])=="/?"
help()
elsif(ARGV[1])==()
print "\n ERROR".red.bold + " | Debe introducir una ruta...\n\n"
help()
elsif(ARGV[0])=="-f"
reset()
featuring()
resultado()
end
El problema de este Script está en las variables. Las variables tienen un "scope" o contexto en el que son usadas. Al terminar dicho contexto la variable desaparece. En este caso las variables se crean en el método reset(), y cuando el método reset desaparece las variables desaparecen con este y no se pueden usar en otro método diferente. Para solucionar este problema se usan las denominadas variables globales, que en Ruby se identifican porque empiezan con un signo "$". Así si defines el método reset así no debería haber más problemas:
def reset()
$renamed = 0
$total = -1
end
Y recuerda entonces que para usarlas siempre han de estar antecedidas con el signo "$" por ejemplo: "#{$total}" si las quieres mostrar dentro de la cadena sin concatenar.
Saludos
Haces que parezca tán fácil
XD
gracias Ryo