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.
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.
Gracias,entendido, y el tema de que No se producen los cambios hasta que cierro el juego?? :S eso no entiendo porque me pasa
porque el archivo esta abierto, cerralo y deberian estar los cambios.
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 ...
Y me queda asi:
[OTRO]Variable1=JuanmaVariable2=MILTON
Todo junto
si usas fputs, no tenes que agregar el chr(13) ni chr(10)
Parece que si, porque en el fichero no se respeta el retorno de carro (chr(13) + chr(10)) <--- Ni aun poniendolo explicitamente.. :S
cuidado con que programa ves luego el archivo resultado, si usas el notepad, no siempre muestra bien los archivos.
No se porque, pero ahora si me anda :S. Les pido mil disculpas por las vueltas, gracias Splinter sobre todo a vos =).
Saludos.
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.
al escribir los pone, y al leer los quita.