Título: (Solucionado) [Ruby] Duda sobre FOR con operador de rango
Publicado por: Eleкtro en 23 Febrero 2012, 23:21 pm
Hola, estoy intentando hacer un code: require "FileUtils" for archivo in ARGV FileUtils.move archivo, ARGV[0] end Process.exit
El problema es que necesito que el for trabaje los argumentos a partir del argumento nº 1, Hasta llegar al último argumento (Número desconocido que capturo con ARGV.length) Osea, Que no tome en cuenta el argumento nº 0 He intentado hacerlo con el operador de rango, y algunos ejemplos más pero no lo consigo... ARGV[1]..ARGV[(ARGV.length)].each { |archivo| FileUtils.move archivo, ARGV[0] }
ARGV[1].upto ARGV[(ARGV.length)] { |archivo| FileUtils.move archivo, ARGV[0] }
for archivo in ARGV[1], ARGV[(ARGV.length)] FileUtils.move archivo, ARGV[0] end
Título: Re: [Ruby] Duda sobre FOR con operador de rango
Publicado por: RyogiShiki en 24 Febrero 2012, 00:02 am
Hola! Bueno la manera en que yo lo haría es la siguiente, usando el operador de rango dentro del indice del array: ARGV[1..ARGV.length].each { |file| puts file }
Saludos
Título: Re: [Ruby] Duda sobre FOR con operador de rango
Publicado por: Eleкtro en 24 Febrero 2012, 00:55 am
usando el operador de rango dentro del indice del array:
Me salvaste de nuevo gracias ^^
Título: Re: (Solucionado) [Ruby] Duda sobre FOR con operador de rango
Publicado por: Eleкtro en 24 Febrero 2012, 13:42 pm
De verdad que muxisimas gracias RyoAl final he conseguido hacer esto, Aunque el def message_box es un " copy & paste" el resto lo he ido haciendo yo, Por eso lo posteo por si he tenido algún fallo al hacerlo o si sale alguna mejora. En principio si el script se usa desde el menú sendto, debería guardarse como un ".rbw" pero entonces ya no saldría el menú de ayuda o los posibles mensajes de errores... No se como puedo hacer para que "reaparezca" la consola solamente para mostrar la ayuda. un saludo.
# -*- coding: UTF-8 -*- # By EleKtro H@cker (24/02/2012) # # Mueve archivos desde un punto de origen hasta un punto de destino # Pensado para usarlo como replazamiento del "SendTo" de Windows. # # (Requiere el uso de argumentos) # Módulos require "FileUtils" require 'dl' exit if Object.const_defined?(:Ocra) # Variables vonstantes BUTTONS_OKCANCEL = 1 BUTTONS_YESNO = 4 CLICKED_CANCEL = 2 CLICKED_YES = 6 CLICKED_NO = 7 # Métodos def help() print "\nSe requiere al menos 1 archivo de origen.\n\n\n" print "Modo de empleo: \n\n" print ' Mover.rb [Destino] [Archivo de origen 1] [Archivo de origen 2] [etc...]' + "\n\n\n" print 'Ejemplo: (Mover tres archivos al directorio de destino "C:"' + "\n\n" print ' Mover.rb "C:\" "D:\Archivo1.txt" "E:\Archivo2.jpg" "F:\Archivo3.mp3"' + "\n\n" Process.exit end def message_box(txt, title='', buttons='') user32 = DL.dlopen('user32') msgbox = DL::CFunc.new(user32['MessageBoxA'], DL::TYPE_LONG, 'MessageBox') r, rs = msgbox.call([0, txt, title, 3].pack('L!ppL!').unpack('L!*')) return r end # Control de errores if ARGV.empty? == true help() elsif ARGV.length < 2 help() elsif File.directory?(ARGV[0]) == false print "\n El directorio de destino no existe: " + (ARGV[0]) + "\n" Process.exit end for archivo in ARGV[1..ARGV.length].each if File.exist?(archivo) == false print "\n El archivo a mover no existe: " + archivo + "\n" end end # Proceso for archivo in ARGV[1..ARGV.length].each if File.exist?(ARGV[0] + "\\" + archivo.split('\\').last) response = message_box("Origen:\n" + archivo + "\n\n Destino:\n " + ARGV[0] + "\\" + archivo.split('\\').last + "\n\n El archivo de destino ya existe, Reemplazar archivo?", "Reemplazar archivo?", BUTTONS_YESNO) if response == CLICKED_YES FileUtils.move archivo, ARGV[0] elsif response == CLICKED_CANCEL Process.exit end else FileUtils.move archivo, ARGV[0] end end # Fin Process.exit
|