Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: tbgio en 25 Julio 2011, 21:40 pm



Título: [RUBY] Es posible variable distinta dentro de for?
Publicado por: tbgio en 25 Julio 2011, 21:40 pm
El asunto no sé como ponerlo mas resumido.

Lo que quiero es que se me genere dentro de un for tantas variables como veces se repita, pero todas las variables distintas, algo así:

Código:
for [i]i[/i] 1..5 do
valor[[i]i[/i]] = [i]i[/i] + 1
end

# => valor1 = 2
# => valor2 = 3
# => valor3 = 4
# => valor4 = 5
# => valor5 = 6

¿Es posible?


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: Novlucker en 25 Julio 2011, 21:53 pm
Nunca he tocado Ruby más allá de un par de veces, pero no es la primera vez que veo ese tipo de pregunta (para muchos lenguajes diferentes), así que ... para que necesitas generar tantas variables y no usas un array/vector?

Saludos


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: tbgio en 25 Julio 2011, 22:41 pm
porque estoy hacuiendo otro script para extraer archivos, y de la forma que este está hecho, tiene una parte que tiene los nombres de los archivos y otro que tiene los datos. Como no se especifica la distancia a la que está del nombre del archivo si no lo que mide, necesito que cada vez que se lea el nombre del archivo me guarde esta distancia en un variable distinta.

De todas formas, quizás estoy confundiendo variable con array.
Aún así, ¿me podría funcionar el comando push() para eso que quiero hacer?


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: Novlucker en 25 Julio 2011, 22:59 pm
Me perdí, que distancia? que archivo? :xD

Explicate un poco mejor de que va el archivo que necesitas crear, y que hace el otro que ya tienes :P

Saludos


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: tbgio en 25 Julio 2011, 23:51 pm
Tengo un archivo que está construido de la siguiente manera:

0x000 04 bytes: Número de direcciones en la tabla
0x004 04 bytes: Cuanto mide el contenido del archivo = $a
0x008 04 bytes: Cuanto mide el nombre del archivo = $b
0x00c $b bytes: Nombre del archivo

Despues de repetirse desde el 0x004 al 0x00c dependiendo de las direcciones que tenga la tabla, a continuación viene el contenido de cada archivo en el mismo orden en el que han aparecido.

Sabiendo esto, he creado el siguiente codigo:

Código:
nombrearchivo = "C:/Program Files/CCP/EVE/resLocalization.stuff"
arch = File.new(nombrearchivo, "rb")
arch_leer = File.new(nombrearchivo, "rb")
dirtotal = arch.sysread(4).unpack('V*').join.to_i
nombrearchivo = "hola/"
# Leo el archivo
cuenta0 = 4
valor5 = []
valor6 = []
for cuenta1 in 1..dirtotal do
valor1 = arch.sysread(4).unpack('V*').join.to_s
valor2 = arch.sysread(4).unpack('V*').join.to_i
cuenta0 = cuenta0 + 8
valor3 = cuenta0
for cuenta2 in 1..valor2 do
cuenta0 = cuenta0 + 1
valor4 = arch.read(1).bytes.first
if valor4 == 92
arch.seek(valor3, IO::SEEK_SET)
content = arch.read(cuenta2)
Dir::mkdir("#{nombrearchivo+content.chop}") unless File.directory?("#{nombrearchivo+content.chop}") == TRUE
end
end
arch_leer.seek(valor3, IO::SEEK_SET)
content = arch_leer.read(valor2)
cuenta0 = cuenta0 + 1
arch.sysread(1)
valor5.push(valor1)
valor6.push(content)
end
sleep 1
for cuenta2 in 0..dirtotal-1 do
puts "guardado #{nombrearchivo+valor6[cuenta2]}"
save_arch = File.open("#{nombrearchivo+valor6[cuenta2]}", File::CREAT | File::WRONLY | File::TRUNC)
save_arch.syswrite("#{valor5[cuenta2]}") unless File.directory?("#{nombrearchivo+valor6[cuenta2]}") == TRUE
end
puts "Fin"

El código no está terminado, pero con la función push() creo haber podido solucionar la duda que tenía.


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: tbgio en 26 Julio 2011, 00:08 am
Script modificado. Por cierto, terminado el extractor de archivos *.stuff del juego EVE:
Código:
nombrearchivo = "C:/Program Files/CCP/EVE/resCharacterModularFemaleHiRes00.stuff"
arch = File.new(nombrearchivo, "rb")
dirtotal = arch.sysread(4).unpack('V*').join.to_i
eve = "EVE/"
Dir::mkdir("#{eve}") unless File.directory?("#{eve}") == TRUE
cuenta0 = 4
valor5 = []
valor6 = []
for cuenta1 in 1..dirtotal do
valor1 = arch.sysread(4).unpack('V*').join.to_i
valor2 = arch.sysread(4).unpack('V*').join.to_i
cuenta0 = cuenta0 + 8
valor3 = cuenta0
for cuenta2 in 1..valor2 do
cuenta0 = cuenta0 + 1
valor4 = arch.read(1).bytes.first
if valor4 == 92
arch.seek(valor3, IO::SEEK_SET)
content = arch.read(cuenta2)
Dir::mkdir("#{eve+content.chop}") unless File.directory?("#{eve+content.chop}") == TRUE
end
valor7 = cuenta0
end
arch.seek(valor3, IO::SEEK_SET)
content = arch.read(valor2)
arch.seek(valor7, IO::SEEK_SET)
cuenta0 = cuenta0 + 1
arch.sysread(1)
valor5.push(valor1)
valor6.push(content)
end
sleep 1
for cuenta1 in 0..dirtotal-1 do
puts "Creado #{eve+valor6[cuenta1]}"

save_arch = File.open("#{eve+valor6[cuenta1]}", File::CREAT | File::WRONLY | File::TRUNC)
save_arch.syswrite("#{arch.read(valor5[cuenta1])}") unless File.directory?("#{eve+valor6[cuenta1]}") == TRUE
end
puts "Fin"


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: Novlucker en 26 Julio 2011, 01:52 am
Justamente me refería a utilizar un array ([]) para ir metiendo cada uno de esos valores que ibas leyendo, donde cada item del array es un elemento.

Por otra parte, te sugiero comenzar a utilizar variables que resulten más representativas, porque así como esta se hace bastante "feo" leer el código :xD

Saludos


Título: Re: [RUBY] Es posible variable distinta dentro de for?
Publicado por: tbgio en 27 Julio 2011, 21:54 pm
Ya ya jajaja, gracias, y así lo hago, pongo cosas mas lógicas que no valorX, pero este lo hice muy rápido porque me urgía sacarlos archivos.