Anuncios Google

[APORTE LUA] System.listDirectoryExt() y System.listDirectorySort()

Pues nada, aquí os dejo dos funciones que espero os sea de utilidad, y recordad: Cerrad las ventanas y abrid el código.

function System.listDirectoryExt(path, exts)
--[[ 1.0.1 : 2010-06. By GorristeR. Under GPL3 License.
Retorna una tabla con los ficheros encontrados con las extensiones 
especificadas, nil si no existe la ruta o hay error. Ejemplo:
   ficherosSonido = System.listDirectoryExt("./music", {"mp3", "ogg", "wma", "mid"})
--]]
    local result = nil
    local fileList = System.listDirectory(path)
    local n, j
    if fileList ~= nil then
        result = {}
        for n = 1, table.maxn(fileList) do
            for j = 1, table.maxn(exts) do
                if string.find(string.lower(fileList[n].name), string.lower("%."..exts[j].."$")) then
                    table.insert(result, fileList[n])
                end
            end
        end
    end
    return result
end

function System.listDirectorySort(path, sortBy, desc, exts)
--[[ 1.0.0 : 2010-06. By GorristeR. Under GPL3 License.
Retorna una tabla con los ficheros encontrados en el orden indicado, puede usarse
el parámetro "exts" para indicar extensiones, en cuyo caso se llama a la función
listDirectoryExt() para leer los ficheros. Devuelve nil si no existe la ruta o hay
error. 
Valores de sortBy: 0: SORT_NAME, 1: SORT_SIZE
desc debe ser true si se quiere un orden descendente, y exts debe contener una tabla
con extensiones si se quiere usar listDirectoryExt() en lugar de listDirectory()
Ejemplos:
    -Listado de ficheros ordenados por nombre (orden por defecto):
       sortedFiles = System.listDirectorySort("./mypath")
    -Listado de ficheros por nombre en orden descendente:
       sortedFiles = System.listDirectorySort("./mypath", 0, true)
    -Listado de imágenes ordenadas por tamaño:
       sortedImages = System.listDirectorySort("./mypath", 1, false, {"jpg", "bmp", "gif", "png"})  
--]]
    local result = nil    
    if sortBy == nil then sortBy = 0 end --SORT_NAME
    if desc == nil then desc = false end --Acendent order
    if exts ~= nil then
        fileList = System.listDirectoryExt(path, exts)
    else
        fileList = System.listDirectory(path)
    end
    if fileList ~= nil then
        local function _sort(a, b)
            if sortBy == nil then sortBy = 0 end --SORT_NAME
            if     sortBy == 0 then result = string.lower(a.name) < string.lower(b.name) --SORT_NAME
            elseif sortBy == 1 then result = a.size < b.size --SORT_SIZE
            end
            if desc then result = not result end
            return result
        end -- _sort
        table.sort(fileList, _sort)
        result = fileList
    end
    return result
end

Sólo puntualizar una cosa, la función no ordena por fecha de archivo porque Homemister no lo implementó.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.


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 NEKERAFA

Una pregunta

¿La tabla que retorna es "fileList"?

Edito: ¿Que es eso de Cerrad las ventanas y abrid el código?

Imagen de d.m.n.

Es algo asi como ''Si al

Es algo asi como ''Si al sowftware libre y no al codigo cerrado de Windows, no? jaja eso entendi.. :S

eso sirve

PARA MOSTRAR EN PANTALLA LOS OBJETOS QUE ESTÉN EN UNA CARPETA ESPECIFICA????

EDITADO: Este post incumples las normas de Scenebeta. Porfavor Revise las normas de la comunidad. Gracias AORV



Imagen de pspgorrister

Esto devuelve una tabla con

Esto devuelve una tabla con los objetos encontrados, el mostrarlos ya es otra cosa. Hay que recorrer dicha tabla.

Imagen de DeViaNTe

jej, estas que te sales con lua xD

Si kieres te paso la implementación básica de una función C "lua", y si gustas en hacer algo para luadev, no dudaré en ponerlo xD ( seee, menos curro pa miii ueee )

Nah, ta wapo el snippet.

Aki uno de fabricación casera:

function iif(a,b,c) if a then return b else return c end end
He aki el inline if, fácil de usar, y muchas veces me acorta el código de maneras increíbles, si se sabe usar xD.


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de pspgorrister

Buen apaño casero :D y gran

Buen apaño casero :D y gran funcion el iif, una de las pocas cosas que me gusta del Visual Basic. XDDD

Sobre la función "basica" para hacer un C<->Lua, pues sí, pégala por aquí a ver, es un tema interesante que aún desconozco, igual sale algo para LuaDev.

De momento estoy mirando ls funciones del Lua mh7 y estoy buscando carencias para intentar hacerlas en Lua "puro", por ejemplo esta de tener un "filtro" a la hora de listar ficheros, más que nada por familiarizarme con el lenguaje, no es que vaya aquí a ponerme a desarrollar una librería a lo bestia, con lo que cuesta (qué te voy a contar yo a ti XDDD).

No sé si tu LuaDev los vas a implementar de cero usando C, o va a ser algo mixto (extendiendo mh7 estilo a lo que he hecho yo, y añadiendo aparte cosas en C). Yo cualquier cosa que haga está dispuesta para que la use quien quiera bajo GPL3.

Un saludo


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de DeViaNTe

De 0 !

Está de 0 man, de ahi que corra tanto ( aún no está fatigado xDD ).

Bueno aki va una función inexistente y no funcional, pero el esqueleto es correcto.

static int media(lua_State *L) {
	int i = lua_gettop(L);
	lua_Number mediana = 0;
	while (i) {
	mediana += luaL_checknumber(L, i);
	i--;
	}
	lua_pushnumber(L, mediana);
	return 1;
}

Mmm, puse lua_Number pq quería que tomara decimales y eso. (usando float hubiera sido lo mismo, pero prefiero mantenerlo puro xD).
(si me interesaran enteros, usando int sería igual de bien).

lua_gettop(L) -- número de argumentos de la función llamada.
luaL_checknumber(L, xx ) -- leer xx argumento como si fuera un number.

lua_pushnumber(L, xx ) -- insertar en la pila de resultados un numero.
return 1; -- 1 resultado. ( si tuviera mas resultados, pos aki se ponen mas xD ).

Aki te dejo mejor la referencia a la API de C, te servirá mejor que mis explicaciones... xD
http://www.lua.org/manual/5.1/es/

Weno, si tu licencia implica tener que hacer release del source, tendré que crear mis propias funciones, no quiero hacer release (al menos global), durante un tiempo, mientras cuaja luadev, no quiero que los demás luaplayers "adopten misteriosamente" la velocidad de luadev... (no se si me entenderás)


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de pspgorrister

Gracias por el código, muy

Gracias por el código, muy explicativo.

Sobre la licencia, una pena, espero que más adelante te decidas a liberarlo, seguro que encuentras muchos colaboradores, algo así como está pasando con el HBL ahora mismo. Tu proyecto es muy amplio, no dudo de tu capacidad de hacerlo sólo, pero es por el tiempo, demasiadas cosas para uno sólo. Cuando ya tengas un buena base "beta" sólida sería una opción interesante hacerlo, verás cómo tienes éxito.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

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.