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
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.
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
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.. =)
cierto, cuando no lo encuentra da -1.
bien, no me habia dado cuenta.