Anuncios Google

[APORTE LUA] myConfig, manejar ficheros ini para usar nuestras variables

Me he decidido a probar Lua, y esta es mi primer trabajo con él, se trata de una clase que maneja ficheros ini. Debido a que muchos os quejaís de como guardar o leer variables de un fichero y que muchas veces usáis 1 variable por fichero, creo que os será de utlidad. Voy a poner la documentación de sus funciones y unos ejemplos, así entenderéis mejor para que sirve y lo más importante: Cómo se usa.

No he podido probarlo con una PSP porque no tengo el intérprete hm7, mh7 o como se llame, en teoría (ya sabemos esto de las "teorías" en informática como van) funcionará sin problemas. Si alguien puede hacer el favor de testear los ejemplos o de usarlo en un proyecto propio, se lo agradecería.

Sobre Lua, decir que me ha desilusionado algo (pero no mucho ehhh Lengua fuera) , en el poco rato que he estado con él, ya he visto un par de cosas de las que carecía, como es la ausencia de la sentencia continue (menos mal que puede hacer un apaño), y que no tenga una función trim() nativa para cadenas.Sorprendido. También es un poco lioso crear una clase, porque en realidad se usan metatablas, un apaño un poco "chapucilla", pero que al menos funciona y da la sensación de que se está trabajando con clases de verdad. Bueno, no me enrollo más y os muestro la clase myConfig:

  • LISTA DE FUNCIONES:

config = myConfig:Load(file)
    Parámetros:
        -file: fichero ini con la configuración.
    Retorna un objeto myConfig y lee todos los valores del fichero.
   
config:GetValue(group, key, value, default)
    Parámetros:
        -group: Nombre del grupo.
        -key: La clave dentro de ese grupo.
        -default: Valor por defecto.
    Retorna el valor guardado en el grupo "group" con la clave "key". Si la
    clave no tiene ningún valor, retorna el valor por defecto.

config:GetSectionValues(group)
    Parámetros:
        -grupo: Nombre del grupo
    Retorna una tabla con cada clave y valor que tiene la sección o grupo
    indicado, si el grupo estuviera vacío o no existiera, devuelve una
    tabla vacía

config:SaveValue(group, key, value)
    Parámetros:
        -group: Nombre del grupo.
        -key: La clave dentro de ese grupo.
        -value: Valor de la clave
    El valor de la clave "key" del grupo "group" se escribe en el fichero.
   
config:StoreValue(group, key, value)
    Parámetros:
        -group: Nombre del grupo.
        -key: La clave dentro de ese grupo.
        -value: Valor de la clave
    Igual que SaveValue(), pero no escribe en disco, sólo en la memoria RAM.
   
config:Save()
    Escribe todos los valores en el fichero ini. Lo mejor es usarlo después
    del último StoreValue() para escribir lo menos en disco.

 

  • EJEMPLOS:

IMPORTANTE CODERS DE PSP: Reemplazar io.write() por screen:print()

config.ini

[preferencias]
Idioma=en
Nombre=Johnny
UltimaCancion=El rap del optimista.ogg
 
[conexion]
server=http://anyserver.cum/foo
user=
pass=**ENCRYPTEDPASSWORD**

sample1.lua

dofile("myconfig.lua")
config = myConfig:Load("config.ini")
name = config:GetValue("preferencias", "Nombre", "Usuario desconocido")
lang = config:GetValue("preferencias", "Idioma", "es")
lastSong = config:GetValue("preferencias", "UltimaCancion", "")
 
io.write("Hola "..name.."\n")
if lang ~= "en" then
    io.write(name..", ¡Tu configuración de lenguaje no es el inglés!\n")
else
    io.write(name.. ", language is set to english!\n")
end
if lastSong ~= "" then
    io.write("¿Quieres escuchar "..lastSong.." otra vez?\n")
end

La salida sería la siguiente:

Hola Johnny
Johnny, language is set to english!
¿Quieres escuchar El rap del optimista.ogg otra vez?

sample2.lua

dofile("myconfig.lua")
config = myConfig:Load("config.ini")
serverName = config:GetValue("conexion", "server", "http://default-server.cum/default")
userName = config:GetValue("conexion", "user", "anónimo")
 
io.write("Tu usuario es "..userName.."\n")
io.write("Cambiando nombre de usuario por johnny88...\n")
userName = "johnny88"
--StoreValue *NO* escribe en disco, usa SaveValue en su lugar o usa Save() al final
config:StoreValue("conexion", "user", UserName) 
 
--Otras instrucciones....
--más ...
 
--Antes de terminar...
config:Save() --Salva al disco

La salida sería la siguiente:

Tu usuario es anónimo
Cambiando nombre de usuario por johnny88..

Ahora config.ini tendrá el user con el valor johnny88

config.ini:

[preferencias]
Idioma=en
Nombre=Johnny
UltimaCancion=El rap del optimista.ogg
 
[conexion]
server=http://anyserver.cum/foo
user=johnny88
pass=**ENCRYPTEDPASSWORD**

Uso de GetSectionValues(). sample3.lua

dofile("myconfig.lua")
config = myConfig:Load("config.ini")
userList = config:GetSectionValues("users")
for key, value in pairs(userList) do
    io.write("Nick: "..key..". Email: "..value.."\n")
end

config.ini

[users]
gorrister=seemysource [at] jmail [dot] cum
johnny88=j88 [at] jotmail [dot] cum
billy=billgates@micro$oft.com
h0us3=doctorhouse [at] hospital [dot] cum

Salida:

Nick: billy. Email: billgates@micro$oft.com
Nick: gorrister. Email: seemysource@jmail.cum
Nick: johnny88. Email: j88@jotmail.cum
Nick: h0us3. Email: doctorhouse@hospital.cum

Supongo que ya ha quedado claro la función de esta clase. Espero que os sea de utilidad en vuestros homebrews. Agradecer también a Arbër su ayuda ya que me aclaró unas dudas que le pregunte.


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 XpReSs-MiGu3l

Menos mal que alguien de está

Menos mal que alguien de está comunidad aporta algo en condiciones.

Imagen de moikop

Genial.

Simplemente genial. Yo me encargo de testearla y mandarla pa' portada ;-)

Un saludo.

Imagen de pspgorrister

Gracias

Te lo pregunto a ti directametne ya que vas a testearla, pero si alguien más puede aclararlo... Es sobre el screen:print(), y el io.write(), que hay una cosa que me ha extrañado mucho.

¿No hay nada de Lua para PSP, estilo io.write() en pantalla?, lo digo porque con screen:print, estás obligado a poner coordenadas (o eso creo), lo cual es bastante engorroso, sobretodo con estos pequeños programas de prueba y testeo en los que no hace falta que lo que se muestre sea "bonito", tan sólo que se muestre.

Un saludo.


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

Imagen de Arbër

No porque

De por sí Lua no tiene funciones gráficas de ningún tipo (que alguien me corrija si no es así) así que estás obligado a usar el screen:print() de los LuaPlayers de PSP, por lo que tendras que hacerlo por coordenadas, aún asi con unos simples calculos podrás centrar facilmente el texto en pantalla para no tener que estar usano coordenadas absolutas ;)

Un saludo.


-----[[7 años en Scenebeta, con la misma ilusión que la del primer día]]----

Imagen de moikop

Que yo sepa no.

Para escribir en pantalla solo esta el screen:print(x,y,"texto",color) y el screen:fontPrint(fontHandler, x, y, "texto", color) (Todos estos parametros son necesarios. Si falta o sobra uno, te manda error.). Y creo que ninguno de estos dos lee el "\n". Simplemente lo escriben en pantalla.

Un saludo.


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Imagen de Arbër

Bueno

Eso depende directamente del intérprete de Lua que estés usando ya que en LuaDev por ejemplo puedes poner los saltos de línea ("\n") y el programa te lo reconoce perfectamente y salta una línea ;)

Un saludo.


-----[[7 años en Scenebeta, con la misma ilusión que la del primer día]]----

Imagen de Arbër

=)

Me alegro de que lo hayas acabado ya. En realidad esto es bastante útil para ser usado como sample de guradar y leer datos de un fichero externo, en este caso config.ini, je, je. Y quita mi nombre de ahi hombre que me sonrojo, que para lo que te he ayudado... :P

Un saludo crack.


-----[[7 años en Scenebeta, con la misma ilusión que la del primer día]]----

Imagen de DeViaNTe

juax!

Recién hace una semana hize una lib para C para manejar inis... xD iba a incluirse con luadev, pero viendo esto, ya no se si incluirlo xD (nah, si k tará. xD)


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

Imagen de pspgorrister

Ya sabes como es esto, la ley

Ya sabes como es esto, la ley de Murphy, cuando te enciendas el cigarro en la parada del autobús, éste aparecerá cruzando la esquina ^^. Bueno, ahora hemos pasado de no tener ninguno a tener 2, esperemos que esto no se convierta en un "ButtonsTesters". xDDD

La verdad es que me extrañó que no hubiera ninguna implementación de esto hecha en Lua, así que en vez del clásico HolaMundo, me puse a ello.


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

Imagen de DeViaNTe

Sep

lua tiene algunas carencias de funciones básicas, (y otras no tanto), que intento recopilar y implementar. Algun ejemplo así de función básica, pero interesante, sería algo estilo "tokens"

string1 = "A:B:C:D";

numtok(string1,":") == 4;

gettok(string1,":",1) == "A";

Algo para separar tokens por ejemplo, y otras funciones, pero no son más k meros ejemplos, si bien su programación es sencilla, serán interesantes de tenerlas implementadas directamente en el luaplayer que tener que reescribirlas cada vez que se necesiten.


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

Imagen de pspgorrister

Funciones de cadenas

Si quieres ideas, sugerencias para nombrar las funciones que crees o concretar conceptos, mírate la documentación de cadenas de php

http://www.php.net/manual/es/book.strings.php

PHP es una pasada manejando cadenas, la mayoría pueden ser implementadas en Lua sin mucho esfuerzo.

Lo malo de programar en PHP es que luego hechas de menos la facilidad que tiene para manipular cadenas Sonrisa.


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

Imagen de DeViaNTe

cierto

ya no me acordaba, mi amado explode! xD
Le exaré un ojo :D

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.