Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Milton884 on May 18, 2011, 02:32:42 PM

Title: Duda ficheros
Post by: Milton884 on May 18, 2011, 02:32:42 PM
HOla que tal, resulta que tengo una funcion que lee archivos ini y modifica el valor de una clave espesifica.

mi funcion es la siguiente:

function string ModificaClave(string Ruta,string seccion,string clave,string valor)
private
int f1;
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 + "\n";
encontrado=false;
else
if(acumulado=="")
acumulado=linea;
end

acumulado=acumulado+linea+"\n";
end
else
if(acumulado=="")
acumulado=linea;
end

acumulado=acumulado+linea+"\n";
end


end

say(acumulado);

//si se modifico, modificamos el fichero real
if(linea_mod!="")
fputs(f1,acumulado);
say("listo");
end

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

end


Pero tengo problemas con este codigo, les cuento.

1- Cuando pongo fputs(f1,acumulado), para reemplazar todo el texto por lo de la variable, se agrega al final del archivo, en vez de pero quiero que se reemplaze TODO el texto por el contenido de esa variable.

Cosa que quede asi:

[OTRO]
Variable1=SAGA
Variable2=MILTON

En vez de asi:

[OTRO]
Variable1=SAGA
Variable2=MILTON
[OTRO][OTRO]\nVariable1=Juanma\nVariable2=MILTON\n\n


2-Y como veran como queda, no hay Retorno de carro entre cada linea, ese tmb es un problema.. Puse en el codigo agregarle + "\n" pero no responde asi..

Bueno muchas gracias y espero me puedan ayudar.

Saludos.
Title: Re: Duda ficheros
Post by: SplinterGU on May 18, 2011, 05:37:43 PM
no podes hacer eso, para cambiar texto en medio tenes que crear un archivo nuevo con el contenido modificado, agregar al final si se puede sobre el mismo archivo.

no, no podes poner asi el retorno de carro, tenes que usar el caracter 13.
Title: Re: Duda ficheros
Post by: Milton884 on May 18, 2011, 05:50:16 PM
Gracias,entendido, y el tema de que No se producen los cambios hasta que cierro el juego?? :S eso no entiendo porque me pasa
Title: Re: Duda ficheros
Post by: SplinterGU on May 18, 2011, 06:04:09 PM
porque el archivo esta abierto, cerralo y deberian estar los cambios.
Title: Re: Duda ficheros
Post by: Milton884 on May 18, 2011, 06:13:47 PM
Ok. Puse entre cada linea que escribo en el archivo: + chr(13)

Pero aun asi, cuando escribe en el fichero, no deja los retornos de carro... :S Probe tambien chr(13) + chr(10) pero tampoco ...
Title: Re: Duda ficheros
Post by: Milton884 on May 18, 2011, 06:24:20 PM
Y me queda asi:
[OTRO]Variable1=JuanmaVariable2=MILTON

Todo junto

Title: Re: Duda ficheros
Post by: SplinterGU on May 18, 2011, 06:29:37 PM
si usas fputs, no tenes que agregar el chr(13) ni chr(10)
Title: Re: Duda ficheros
Post by: Milton884 on May 18, 2011, 07:02:20 PM
Parece que si, porque en el fichero no se respeta el retorno de carro (chr(13) + chr(10)) <--- Ni aun poniendolo explicitamente.. :S
Title: Re: Duda ficheros
Post by: SplinterGU on May 18, 2011, 08:07:05 PM
cuidado con que programa ves luego el archivo resultado, si usas el notepad, no siempre muestra bien los archivos.
Title: Re: Duda ficheros
Post by: Milton884 on May 18, 2011, 09:44:51 PM
No se porque, pero ahora si me anda :S. Les pido mil disculpas por las vueltas, gracias Splinter sobre todo a vos =).
Saludos.
Title: Re: Duda ficheros
Post by: Drumpi on May 19, 2011, 07:21:04 PM
Si quieres sobreescribir el contenido lo tienes que abrir en modo O_WRITE, de esa manera, el contenido anterior se borra.

Lo del retorno de carro y fin de linea me suena que con los últimos cambios FPUTS los ignora. Es cómodo que te elimine esos caracteres al leer, pero no al escribir. Pero vamos: con FWRITE y una variable CHAR/BYTE con los valores 13 y 10 se soluciona.
Title: Re: Duda ficheros
Post by: SplinterGU on May 19, 2011, 07:26:15 PM
al escribir los pone, y al leer los quita.