Duda ficheros

Started by Milton884, May 18, 2011, 02:32:42 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Milton884

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.

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Milton884

Gracias,entendido, y el tema de que No se producen los cambios hasta que cierro el juego?? :S eso no entiendo porque me pasa

SplinterGU

porque el archivo esta abierto, cerralo y deberian estar los cambios.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Milton884

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 ...

Milton884

Y me queda asi:
[OTRO]Variable1=JuanmaVariable2=MILTON

Todo junto


SplinterGU

si usas fputs, no tenes que agregar el chr(13) ni chr(10)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Milton884

Parece que si, porque en el fichero no se respeta el retorno de carro (chr(13) + chr(10)) <--- Ni aun poniendolo explicitamente.. :S

SplinterGU

cuidado con que programa ves luego el archivo resultado, si usas el notepad, no siempre muestra bien los archivos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Milton884

No se porque, pero ahora si me anda :S. Les pido mil disculpas por las vueltas, gracias Splinter sobre todo a vos =).
Saludos.

Drumpi

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.
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)

SplinterGU

al escribir los pone, y al leer los quita.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2