Problema funcion lectura .INI

Started by Milton884, May 26, 2011, 04:02:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Milton884

Hola, he posteado una fiuncion en el foro, pero me di cuenta que algo esdta mal, la funcion es esta:


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,"=");
return substr(linea,pos_igual+1);
end
end
end

if(encontrado==false)
return "nada";
end

fclose(f1);
end

Y mi archivo.ini dice asi:

[CUERPO1]
Abajo=1-2-3-4-5-6
Arriba=7-8-9-10-11-12
Izquierda=14-15-16-17-18
Derecha=19-20-21-22-23

[CUERPO2]
Abajo=24-25-26-27-28-29
Arriba=30-31-32-33-34-35
Izquierda=-36-37-38-39-40
Derecha=40-41-42-43-44

Como veran si leen el codigo, lo que hace la funcion es preguntar si encontro el parametro puesto (seccion), en mi caso "CUERPO2" (que dentro de la funcion les agrega los corchetes. Y segun encuentre sigue leyendo linea por linea. Pero siempre da como resultado la primera seccion (en este caso "CUERPO1" y las primeras claves como retorno de la funcion, me explico?

Estube horas y no encuentro el error en la funcion...

Bueno muchas gracias espero sus ayudas muchisimo.

Milton

SplinterGU

#1
otra cosa que tenes que poner, es que una vez que encontraste la seccion, si encontras un [ tenes que considerar que la clave no existe.


ahhh, find usa regex, si usas [ entonces estas definiendo una clave regex, tenes que usar \[ y \], si mal no recuerdo.

no, me mande cualquiera, la find no usa regex.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Milton884

Probe lo que me dijiste, pero aun sigue leyendo siempre la primera seccion [CUERPO1] en este caso, y yo quiero q lea CUERPO2 o CUERPO3 si existiese. Asi use la funcion para probar
                        ....
            strindex_cuerpo=leeindexkey("INIT/Cuerpos.ini","CUERPO2","Derecha");
            say(strindex_cuerpo);
                        ....

(aclaro q la variable strindex_cuerpo esta definida, esto esta dentro de un proceso, y las funciones arriba de todo para q se puedan leer).

Si no es molestia alguien podria probarlo? haber si soy yo el que tiene la maldicion o es realmente que no anda, ni siquiera con las modificaciones dichas que me dijo Splinter.

Gracias

Milton884

Ya lo solucione, lo dejo para los demas que quieran usar esta funcion.

El error en esta en la linea:

if(find(linea,"(CUERPO2)"))

Hay que cambiarla por

if(L=find(linea,"(CUERPO2)")!=-1)

ahi dice: Si encuentro "(CUERPO2)" en variable Linea ( o sea si es !=-1 (distinto a -1)) cosa q almaceno a la vez en la variable L.
Si se encontro , L valdra 1.. =)


SplinterGU

cierto, cuando no lo encuentra da -1.

bien, no me habia dado cuenta.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2