elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Ruby] Me ayudan a corregir este script?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ruby] Me ayudan a corregir este script?  (Leído 3,408 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
[Ruby] Me ayudan a corregir este script?
« en: 20 Febrero 2012, 17:33 pm »

Hola

Este es mi primer script en Ruby, Y lo he hecho con mucha ayuda sino no habría podido

Lo único que me preocupa del script es el def "todos", no se si está bien hecho.

Y me gustaría simplificar la comprobacion de los argumentos así por ejemplo:

Código
  1. if (ARGV[0])==(-h|--help)
  2. help()
  3. end

Pero no se hacerlo bien xD

Si ven algún error o mejora diganmelo, gracias

EDITO:
Por cierto, Me parece tremendamente inseguro que al usar:
File.rename
Si existe un archivo con el mismo nombre que el archivo nuevo (renombrado), El archivo se reemplaza por el renombrado, En vez de dar error... O algo parecido xD





Código
  1. # -*- coding: UTF-8 -*-
  2.  
  3.  
  4. # Renombrador preconfigurado de archivos
  5. #
  6. # El código original es de RyogiShiki
  7. # http://foro.elhacker.net/scripting/solucionado_ruby_renombrando_un_caracter_ilegal-t354066.0.html
  8.  
  9.  
  10.  
  11. # Gemas, Módulos...
  12.  
  13. require 'find'
  14. exit if Object.const_defined?(:Ocra)
  15.  
  16. system('chcp 1252 >NUL')
  17.  
  18.  
  19.  
  20. # Métodos
  21.  
  22. def reset_vars()
  23. $total = -1
  24. $renamed = 0
  25. end
  26.  
  27. def resultado()
  28. puts " Procesados: #{$total} archivos"
  29. puts " Renombrados: #{$renamed} archivos"
  30. system('chcp 850 >NUL')
  31. Process.exit
  32. end
  33.  
  34. def advise()
  35. print ' Use "Renamer.exe -a" Para mostrar la ayuda.' + "\n"
  36. system('chcp 850 >NUL')
  37. Process.exit
  38. end
  39.  
  40. def help()
  41. system('chcp 850 >NUL')
  42. print "\n Modo de empleo:\n\n"
  43. print "  " + __FILE__.split('/').last + " [Opci\u00F3n] [Ruta]\n\n"
  44. print "\n Opciones: \n\n"
  45. print "  -c --comilla        Reemplaza \[\u00B4\] por \[\u0027\]\n\n"
  46. print "  -e --extension      Reemplaza [ .mp3]  por [.mp3]\n\n"
  47. print "  -f --featuring      Reemplaza [ ft ],[ ft. ],[ feat ],[ featuring ] por [ feat. ]\n\n"
  48. print "  -g --guion          Reemplaza \[\u2013\] por \[-\]\n\n"
  49. print "  -i --interrogante   Elimina \[\u00BF\]\n\n"
  50. print "  -t --todo           Combina todas las opciones (-c + -e + -f + -g + -i)\n"
  51. Process.exit
  52. end
  53.  
  54. def reemplazar(caracter_a_reemplazar, nuevo_caracter)
  55. $total = -1
  56. Find.find(ARGV[1].gsub("\\", "/")) { |path|
  57. path = path.encode('utf-8')
  58. if path[caracter_a_reemplazar] then
  59. if File.exist?(path.gsub(caracter_a_reemplazar, nuevo_caracter))
  60. print "\n ERROR.   El archivo a reemplazar ya existe: " + (path).split('/').last + "\n"
  61. else
  62. File.rename(path, path.gsub(caracter_a_reemplazar, nuevo_caracter))
  63. $renamed += 1
  64. end
  65. end
  66. $total += 1
  67.    }
  68. end
  69.  
  70.  
  71.  
  72. # Argumentos
  73.  
  74. if (ARGV.empty?) then
  75. help()
  76. end
  77.  
  78. if (ARGV[0])=="-a" or ARGV[0] == "/?"
  79. help()
  80. end
  81.  
  82. if (ARGV[1])==()
  83. print "\n ERROR.   Debe introducir una ruta...\n\n"
  84. advise()
  85. elsif if not File.directory? (ARGV[1]) then
  86. print "\n ERROR.   La ruta no existe...\n\n"
  87. advise()
  88. end
  89. end
  90.  
  91. if ARGV[0] == "-c" or ARGV[0] == "--comilla"
  92. reset_vars()
  93. reemplazar("\u00B4", "\u0027")
  94. resultado()
  95. elsif (ARGV[0])=="-e" or ARGV[0] == "--extension"
  96. reset_vars()
  97. reemplazar(" .mp3", ".mp3")
  98. reemplazar(" .MP3", ".mp3")
  99. reemplazar(" .Mp3", ".mp3")
  100. resultado()
  101. elsif (ARGV[0])=="-f" or ARGV[0] == "--featuring"
  102. reset_vars()
  103. reemplazar(" ft. ", " feat. ")
  104. reemplazar(" Ft. ", " feat. ")
  105. reemplazar(" FT. ", " feat. ")
  106. reemplazar(" ft ", " feat. ")
  107. reemplazar(" Ft ", " feat. ")
  108. reemplazar(" FT ", " feat. ")
  109. reemplazar(" feat ", " feat. ")
  110. reemplazar(" Feat ", " feat. ")
  111. reemplazar(" FEAT ", " feat. ")
  112. reemplazar(" featuring ", " feat. ")
  113. reemplazar(" Featuring ", " feat. ")
  114. reemplazar(" FEATURING ", " feat. ")
  115. resultado()
  116. elsif (ARGV[0])=="-g" or ARGV[0] == "--guion"
  117. reset_vars()
  118. reemplazar("\u2013", "-")
  119. resultado()
  120. elsif (ARGV[0])=="-i" or ARGV[0] == "--interrogante"
  121. reset_vars()
  122. reemplazar("\u00BF", "")
  123. resultado()
  124. elsif (ARGV[0])=="-t" or ARGV[0] == "--todo"
  125. reset_vars()
  126. reemplazar("\u00B4", "\u0027")
  127. reemplazar("\u2013", "-")
  128. reemplazar("\u00BF", "")
  129. reemplazar(" ft. ", " feat. ")
  130. reemplazar(" Ft. ", " feat. ")
  131. reemplazar(" FT. ", " feat. ")
  132. reemplazar(" ft ", " feat. ")
  133. reemplazar(" Ft ", " feat. ")
  134. reemplazar(" FT ", " feat. ")
  135. reemplazar(" feat ", " feat. ")
  136. reemplazar(" Feat ", " feat. ")
  137. reemplazar(" FEAT ", " feat. ")
  138. reemplazar(" featuring ", " feat. ")
  139. reemplazar(" Featuring ", " feat. ")
  140. reemplazar(" FEATURING ", " feat. ")
  141. reemplazar(" .mp3", ".mp3")
  142. reemplazar(" .MP3", ".mp3")
  143. reemplazar(" .Mp3", ".mp3")
  144. resultado()
  145. end
  146.  


« Última modificación: 23 Febrero 2012, 10:33 am por EleKtro H@cker » En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: [Ruby] Me ayudan a corregir este script?
« Respuesta #1 en: 20 Febrero 2012, 17:43 pm »

Mirándolo rápido no veo nada que objetar, para lo que mencionas al principio puedes usar "or":

Código
  1. if (ARGV[0])=="-h" or "--help"
  2. help()

--EDIT--
Para que el archivo no se reemplace con File.rename puedes comprobar si el archivo ya existe con File.exist?(file)

Esta podría ser la forma correcta:
Código
  1. if (File.exist?(path_to_file))
  2.    print "ERROR!!"
  3.  

--EDIT--
Una sugerencia más, para reducir la cantidad de lineas, puedes definir una función más genérica, que reciba parámetros, y llamar a la función en base a los argumentos. Me refiero a que se simplifica mucho de la siguiente forma:

Código
  1. def reemplazar(caracter_a_reemplazar, nuevo_caracter)
  2.    Find.find(ARGV[1].gsub("\\", "/")) { |path|
  3. path = path.encode('utf-8')
  4. if path[caracter_a_reemplazar] then
  5. File.rename(path, path.gsub(caracter_a_reemplazar, nuevo_caracter))
  6. $renamed += 1
  7. end
  8. $total += 1
  9.    }
  10. end
  11.  
  12. if (ARGV[0] == "-c" or "--comilla")
  13.  reemplazar("\u004B", "\u0027")
  14. else if ...

Saludos


« Última modificación: 20 Febrero 2012, 18:06 pm por RyogiShiki » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: [Ruby] Me ayudan a corregir este script?
« Respuesta #2 en: 21 Febrero 2012, 04:56 am »

Eres un genio de ruby jeje muxas gracias por todo

Código
  1. if (ARGV[0])=="-h" or "--help"
  2. help()

Código
  1. if (ARGV[0])=="-h"
  2. help()
  3. elsif (ARGV[0])=="-c" or "--comilla"
  4. reset()
  5. comilla()
  6. resultado()
  7.  
  8. end

Me da error en la linea del END
Código:
1.rb:147: warning: string literal in condition

He intentado de la siguiente manera pero solo funciona "-c" y me manda el mismo error:

Código
  1. elsif (ARGV[0]).eql? "-c" or "--comilla"
  2.  
  3. elsif (ARGV[0])==("-c" or "--comilla")
  4.  
  5. elsif (ARGV[0]) == ("-c") or ("--comilla")
  6.  
  7. elsif (ARGV[0]) == "-c" == "--comilla"
  8.  





Otro problema que tengo es que al usar la opcion "-f" o "-t" no consigo que me muestre correctamente el número de archivos renombrados

Por ejemplo si uso "-f" y tengo este archivo:

Código:
abc ft. ft abc.txt

Lo renombra dos veces, así:

Código:
abc feat. ft abc.txt
abc feat. feat. abc.txt
1+1

Y entonces se repite el valor en la variable global, el resultado es: "archivos renombrados: 2"

He intentado meter la variable "$renamed" dentro del "def reemplazar", Pero el resultado es un campo vacío, No me da ningún valor.

Un saludo y gracias d nuevo!!!
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: [Ruby] Me ayudan a corregir este script?
« Respuesta #3 en: 23 Febrero 2012, 04:03 am »

Ups! Cuanto lo siento. He cometido un error garrafal. es un error que suelo cometer bastante cuando escribo código al vuelo, no me doy cuenta. Mea Culpa. La manera correcta de hacerlo es esta:

Código
  1. if ARGV[0] == "-c" or ARGV[0] == "--comilla"

Lo siento por el quebradero de cabeza! XD otra vez, fue mi culpa, no me fije.

Ahora el segundo problema que tienes no lo entiendo muy bien, puesdes explicarte mejor.

Saludos
« Última modificación: 23 Febrero 2012, 04:44 am por RyogiShiki » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: [Ruby] Me ayudan a corregir este script?
« Respuesta #4 en: 23 Febrero 2012, 10:20 am »

Código
  1. if ARGV[0] == "-c" or ARGV[0] == "--comilla"

Gracias!


esto no me funciona:

Código
  1. if not (ARGV[0]) == "-c" or (ARGV[0]) == "--comilla"
  2. print "\n ERROR.   Opcion incorrecta...\n\n"
  3. advise()
  4. end

Código
  1. if not (ARGV[0]) == "-c" or not (ARGV[0]) == "--comilla"
  2. print "\n ERROR.   Opcion incorrecta...\n\n"
  3. advise()
  4. end

Solo reconoce "-c"
que estaré haciendo mal?


El segundo problema no tiene mucha importancia
Solo es que si uso la opcion "-f" o "-t" del script, y encuentra 2 o más coincidencias en el mismo archivo, por ejemplo en el archivo: "Artista ft. FT - Titulo.mp3"

Primero lo renombra a esto:      "Artista feat. Featuring - Titulo .mp3"      ,Y se suma el valor +1 en la variable RENAMED
Lo vuelve a renombrar a esto:  "Artista feat. feat. - Titulo .mp3"             ,Y se suma el valor +1 en la variable RENAMED otra vez

Entonces me dice RENAMED que ha renombrado 2 archivos, Cuando en realidad solo ha sido 1 archivo.
« Última modificación: 23 Febrero 2012, 10:34 am por EleKtro H@cker » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ Batch ] Preguntas y ayuda para corregir mi script...
Scripting
SuperDraco 6 6,992 Último mensaje 24 Marzo 2011, 15:57 pm
por SuperDraco
Script en Ruby
Scripting
MeCraniDOS 3 3,035 Último mensaje 1 Noviembre 2012, 10:06 am
por Eleкtro
Problema Script Ruby
Scripting
daniel.r.23 1 2,114 Último mensaje 30 Marzo 2013, 22:48 pm
por RyogiShiki
¿Me ayudarían a corregir este código?
Programación C/C++
AnungUnRama 6 3,254 Último mensaje 9 Mayo 2013, 16:30 pm
por leosansan
me ayudan con este problema porfa
Programación C/C++
streetxfoger 8 3,651 Último mensaje 30 Mayo 2013, 23:55 pm
por twins
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines