Autor Tema: mod_leeIni (Lee y modifica archivos .ini)  (Leído 10515 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Milton884

  • Full Member
  • ***
  • Mensajes: 190
  • Karma: 3
    • Ver Perfil
mod_leeIni (Lee y modifica archivos .ini)
« en: Mayo 19, 2011, 11:38:43 am »
Que tal? me puse a hacer dos funciones, para leer y modificar valores de clave de X archivo .ini.
Para los principiantes, doy un ejemplo.

Un archivo .ini es un archivo plano de texto, que contiene secciones, claves y valores, ejemplo:

[GENERAL]
Experiencia=10
Oro=20

[ADMINS]
Admin1=Juan
Admin2=Martin


Y con estas funciones (ModificaClave y LeeClave) , podemos modificar por ejemplo el valor de:

Admin
Admin2
Experiencia
Oro..
etc.

Y leer el valor de una clave de estas, por ejemplo Admin1 que es "Juan".

Dejo el link con la libreria :)

No es gran cosa , pero es mi primer aporte y se que muchos no lo han hecho aun.

http://www.megaupload.com/?d=A13WU4F4

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12413
  • Karma: 366
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #1 en: Mayo 19, 2011, 12:46:29 pm »
muchas gracias! karma!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Outlaw

  • Sr. Member
  • ****
  • Mensajes: 460
  • Karma: 9
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #2 en: Mayo 19, 2011, 02:28:40 pm »
Muy buen aporte, y útil además! Gracias! Karma ++
"Life is cheap when the bounty is high"

Desconectado Milton884

  • Full Member
  • ***
  • Mensajes: 190
  • Karma: 3
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #3 en: Mayo 19, 2011, 03:31:28 pm »
Un gusto compartirlo con uds =).
Saluds

Desconectado DCelso

  • Hero Member
  • *****
  • Mensajes: 3707
  • Karma: 180
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #4 en: Mayo 19, 2011, 04:54:22 pm »
y ¿como leerá esto?

[GENERAL]
Experiencia=10
Oro=20

[ADMINS]
Admin1=Juan
Admin2=Martin
Experiencia=Pepe

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Desconectado Milton884

  • Full Member
  • ***
  • Mensajes: 190
  • Karma: 3
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #5 en: Mayo 19, 2011, 05:34:18 pm »
La funcion LeeIni primero Busca la SECCION, por ejemplo si es [GENERAL], o [ADMIN], luego de ahi sigue leyendo y busca la clave, luego el valor. No se va a confundir nunca cuand pongas 2 claves iguales por lo que te dije recien.

Saludos.

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6040
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #6 en: Mayo 20, 2011, 03:17:28 pm »
No es gran cosa hasta que tienes que hacerlo por tu cuenta. Enhorabuena :) Karma por la iniciativa, más de un novato y algún amateur te lo agrdecerá ;)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Desconectado DCelso

  • Hero Member
  • *****
  • Mensajes: 3707
  • Karma: 180
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #7 en: Mayo 23, 2011, 09:58:38 am »
La funcion LeeIni primero Busca la SECCION, por ejemplo si es [GENERAL], o [ADMIN], luego de ahi sigue leyendo y busca la clave, luego el valor. No se va a confundir nunca cuand pongas 2 claves iguales por lo que te dije recien.

Saludos.
pero entonces ¿como leemos la variable experiencia de general y luego como leemos la variable experiencia de admins?

Y si hay dos secciones con mismo nombre¿?

[GENERAL]
Experiencia=10
Oro=20

[ADMINS]
Admin1=Juan
Admin2=Martin
Experiencia=Pepe

[GENERAL]
Experiencia2=10
Oro=20

:D, toy ahí buscando las cosquillas :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Desconectado FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5526
  • Karma: 125
  • Sexo: Masculino
    • Ver Perfil
    • GECA soft
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #8 en: Mayo 23, 2011, 10:16:58 am »
Eso es un ini mal formado para empezar...

Conectado Yawin

  • Hero Member
  • *****
  • Mensajes: 1088
  • Karma: 44
  • Sexo: Masculino
  • La primera persona que ha "demosceneado" en Bennu.
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #9 en: Mayo 23, 2011, 10:32:33 am »
Pero puede pasar. Yo haría un pequeño controlador que cuando haya claves repetidas devuelva un error.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12413
  • Karma: 366
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #10 en: Mayo 23, 2011, 10:37:31 am »
eso no deberia pasar
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado l1nk3rn3l

  • Hero Member
  • *****
  • Mensajes: 1804
  • Karma: 244
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #11 en: Enero 03, 2012, 07:25:24 am »
lo probe con el ultimo bennu y ocasiona un crash

// include "DLLs/import.prg";

function string ModificaClave(string Ruta,string seccion,string clave,string valor)
    private
        int f1;
        int i;
        string linea;
        string linea_mod;
        string acumulado;
        bool encontrado;
        int longitud_clave;
    end
begin
    f1=fopen(ruta,O_READWRITE);
    encontrado=false; //por defecto false pero we.
    longitud_clave=len(clave);
   
    while(!(feof(f1)))
        linea=fgets(f1);

        //si encuentra la Seccion...
        if(find(linea,"[" + seccion + "]"))
            encontrado=true;
        end
       
        //si ya se encontro la seccion
        if(encontrado==true)
            //buscamos la clave y modificamos el valor
            if(substr(linea,0,longitud_clave)==clave)
                linea_mod=clave + "=" + valor;
                acumulado=acumulado + linea_mod + chr(13) + chr(10);
                encontrado=false;
            else
                if(acumulado=="")
                    acumulado=linea + chr(13) + chr(10);
                else
                    acumulado=acumulado + linea + chr(13) + chr(10);
                end
            end
        else
            if(acumulado=="")
                acumulado=linea + chr(13) + chr(10);
            else
                acumulado=acumulado+linea + chr(13) + chr(10);
            end
        end
    end

    fclose(f1);
   
    fopen(ruta,O_WRITE);
    fputs(f1,acumulado);   
    fclose(f1);
   
end


function string LeeClave(string ruta,string seccion,string clave)
    private
        int f1;
        string linea;
        bool encontrado;
        int longitud_clave;
        int pos_igual;
    end
begin
    f1=fopen(ruta,O_READ);
    encontrado=false; //por defecto false pero we.
    longitud_clave=len(clave);
    while(!(feof(f1)))
        linea=fgets(f1);

        //si encuentra la Seccion...
        if(find(linea,"[" + seccion + "]"))
            encontrado=true;
        end
       
        //si ya se encontro la seccion
        if(encontrado==true)
            //buscamos el valor de la clave
            if(substr(linea,0,longitud_clave)==clave)
                pos_igual=find(linea,"=");
                say(substr(linea,pos_igual+1));
                return substr(linea,pos_igual+1);
            end
        end
    end
   
    if(encontrado==false)
        return "nada";
    end
   
end

PROCESS main(); begin
     ModificaClave("conf.ini","OTRO","Variable3","Simio");
     loop
         if(key(_esc))
             exit(0);
         end
       
         frame;
     end
 end


Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12413
  • Karma: 366
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #12 en: Enero 03, 2012, 07:29:10 am »
pudiste ver en que linea/funcion?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado l1nk3rn3l

  • Hero Member
  • *****
  • Mensajes: 1804
  • Karma: 244
  • Sexo: Masculino
    • Ver Perfil
Re: mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #13 en: Enero 03, 2012, 03:26:00 pm »
no lo corri en debug solo lo ejecute y error de esos de crash general


probado en windows 7 y xp

Desconectado panreyes

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 1974
  • Karma: 62
  • Sexo: Masculino
    • Ver Perfil
    • panreyes.com
Re:mod_leeIni (Lee y modifica archivos .ini)
« Respuesta #14 en: Marzo 14, 2014, 10:14:01 am »
Hola. He mejorado y creada mi propia versión del lector de INIs:
Código: [Seleccionar]

Function string ini_read(string ruta,string seccion,string clave);
Private
int fp;
string linea;
string datos;
bool encontrado;
int longitud_clave;
int pos_igual;
Begin
fp=fopen(ruta,O_READ);
encontrado=false; //por defecto false pero we.
longitud_clave=len(clave);
while(!feof(fp))
linea=fgets(fp);


if(encontrado==false)
//si encuentra la Seccion...
if(find(linea,"[" + seccion + "]"))
encontrado=true;
end
else
//si ya se encontro la seccion buscamos el valor de la clave
if(substr(linea,0,longitud_clave)==clave)
pos_igual=find(linea,"=");
datos=substr(linea,pos_igual+1);
break;
end
end
end
fclose(fp);


return datos;
end


Aún se puede optimizar más, pero así está bien. Las diferencias con el anterior son:
- Se hace un fclose tras leer el fichero (!!!)
- Si se ha encontrado ya la sección, no la seguimos buscando
- Reestilizado a mi manera xD