Anuncios Google

[LuaDEV] Crear un listador [Solucionado gracias a Zerozelta][Solucion en el post]

Hola a todos, escribo este post ya que como al anterior nadie supo darle una solución haber si a alguien se le ocurria como hacer un script que escribiera en un TXT todas las carpetas y carpetas dentro de esas carpetas.

que haya en la carpeta "ms0:/MUSIC" por ejemplo.

 

Aquí os dejo un esquema de lo que quiero hacer.

  • Tenemos la carpeta MUSIC con varias carpetas dentro

 

  • Queremos que todos los nombres de esas carpetas se apunten en un TXT

Ejemplo de cómo quedaría el TXT:

ms0:/MUSIC
ms0:/MUSIC/A
ms0:/MUSIC/B
ms0:/MUSIC/C
ms0:/MUSIC/D
ms0:/MUSIC/A/A1
ms0:/MUSIC/C/C1
ms0:/MUSIC/C/C2
ms0:/MUSIC/D/D1

¿Alguien me puede ayudar? Se lo agradecería mucho

 

Solución gracias a Zerozelta

 

TXT = io.open("Directs.txt","w")
usb.on()
 
function printDir(path)
 local tab = files.list(path)
 
 for i = 1,#tab do
   local f = tab[i]
   if f.directory then
     text = text.."\n"..printDir(f.name)
   else
     text = text.."\n"..f.name
   end
 
--Esto es para saber como va el proceso, no es necesario
   screen.print(5,5,i.."/"..#tab) --Indica el numero de carpetas y el numero de carpeta que esta leyendo
   screen.print(5,20,f.name) --Indica el nombre de la carpeta que está leyendo
   screen.print(5,35,text) --Indica todas las carpeta ya leidas
   screen.flip() 
   os.sleep(1) --Pausamos un segundo para que nos de tiempo a leer
 end
 return text
end
 
TXT:write(printDir("ms0:/MUSICA"))
TXT:flush()
os.message("Proceso finalizado")
TXT:close()
os.exit()


Sígueme en Twitter: @Aitor_db


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de zerozelta

para eso puedes hacer un

para eso puedes hacer un algoritmo recursivo, aqui un ejemplo:

function printDir(path)
 local tab = files.list(path)
 local text = path 
 
 for i = 1,#tab do
   local f = tab[i]
   if f.directory == true then
     text = "\n"..function printDir(f.name)
   else
     text = "\n"..f.name
   end
 end
 
 return text
end

(Nota: no lo he probado, pero si no me equivoco esa funcion te devuelve un texto con todos los archivos y subdirectorios de la ruta uqe le pases como argumento)

Solamente tienes que llamar a la funcion printDir([pat]) y escribir su contenido en el archivo de texto

Si falla en algo avisame

Saludos¡¡


Imagen de AitorDB

By Aitor

Muchísimas gracias, al final con tu code y dos o tres cambios de algunos pequeños fallos he conseguido que funcione, muchas gracias Sonrisa


Sígueme en Twitter: @Aitor_db

Imagen de User170294

Buen ejemplo.

Si fuesen muchos archivos o carpetas sería más recomendable hacer:

function printDir(path)
 local tab = files.list(path)
 local text = path 
 
tabLong = #tab -- De esta manera se aumenta la velocidad del programa ;)
 for i = 1,tabLong do
   local f = tab[i]
   if f.directory == true then
     text = "\n"..function printDir(f.name)
   else
     text = "\n"..f.name
   end
 end
 
 return text
end


Imagen de Chimecho

Mmmm...

En realidad en este caso es lo mismo, la velocidad será la misma.

Explico: Al "declarar" el for, se almacena automáticamente el límite, es decir, la operación de longitud se ejecuta una sola vez en el bucle, mira este ejemplo:

function long(tbl)
    print("long!");
    return #tbl;
end
 
bla = {1,2,3,4,5,6,7,8,9,10};
for i=1, long(bla) do
    print(bla[i]);
end

Al correrlo sale:

long!
1
2
3
4
5
6
7
8
9
10

 

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

De eso quería saber yo hace tiempo...

¿Como se haria para que en cada pasada calculara el maximo una y otra vez? :D

Imagen de User170294

Sencillo

Simplemente cada vez que hagas:

--[[ Actualizas la variable tab ]]--
tab = files.list( path )
--[[ Cada vez que llames a #tab, esto te devolberá el número actualizado ]]--
#tab

Saludos Dove ;)

Edito:

Utilizando un bucle que se repita por supuesto.


Que es lo que quieres hacer?

Que es lo que quieres hacer? para que necesitas calcular el máximo? Por si eliminas/agregas contenido a la tabla al vuelo?

Imagen de Chimecho

mmmm

Se me ocurriría con una variable global que cambie dentro del bucle, pero no lo veo útil, y además creo que pueden haber problemas...



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de Andres_Ne

mmmmm creo que no es

mmmmm creo que no es necesario el 

   if f.directory == true then

 

ya que al poner

 if f.directory

eso verificara que sea un directorio,sin nececidad de el booleano.. solo es una idea :)


 

 

De hecho es lo mismo, una

De hecho es lo mismo, una condición tipo if variable then ... end ejecutará su code si la variable tiene CUALQUIER valor, excepto false o nil (es decir, pongas o no pongas el == true, igual hace la comparación).

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.