Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas al guardar datos en un archivo. (https://www.clubdelphi.com/foros/showthread.php?t=19778)

alfredosg19 26-03-2005 08:28:05

Problemas al guardar datos en un archivo.
 
:DHola de nuevo, el motivo de mi consulta es que tengo un array del que guardo los datos en un archivo por medio de un procedimiento, pero no los guarda como yo quiero, especifico, cuando me guarda los datos me los guarda en el archivo con un cuadrado transparente separando cada valor del array  y ni siquiera sé que código ASCII tiene. Mi intención es que me separe los valores del Array por otro carácter (me da igual cual) o que no me los separe. Por otra parte quisiera que cuando acaba de grabar todos los valores de un Array (Array[1].Nombre, Array[1].Apellidos...) cuando acabe y antes de pasar al siguiente (Array[2].Nombre, Array[2].Apellidos...) me ponga un retorno de carro al final.
Código:

procedure TPagesDlg.guardadades;
 Var F: file of TUsuari;
        I:Integer;
 begin
  AssignFile(F,'Usuari.txt');
  Rewrite(F);
  For I:=Low(Usuari) to High(Usuari) do
        Write(F,Usuari[i]);
  CloseFile(F);
 end;


alfredosg19 26-03-2005 10:30:39

Delimitar linea.
 
Hola, sigo dándole vueltas al caso anterior y no encuentro la manera. Tengo muchas dudas, pero sobre todo:¿Cómo puedo hacer para indicarle hasta cuando quiero que me grabe en una línea del archivo?. Muchas gracias por vuestra ayuda.

Lepe 26-03-2005 11:27:22

La verdad, creo que te estas complicando la vida, que más dá como se guarden los datos, siempre y cuando se guarden y recuperen bien desde el programa.

Es más, en tu caso, guardaría el TRecord al completo, en lugar de guardar linea a linea. LA VENTAJA: con una linea de código ya tienes leido todo el registro.

Por otra parte, si dejas el archivo como texto, cualquiera lo puede modificar, y como no sabe como funciona el programa, puede dejar retornos de carro sobrantes / de falta, haciendo que falle tu programa.

Un saludo

alfredosg19 26-03-2005 12:12:38

Sigue dando problemas.
 
Gracias Lepe, tu consejo de antes me ha servido de mucho, el problema que tengo ahora es que al guardarse el array al archivo me sobreescribe los datos. He probado con poner un Append (pero me da error)....:mad:, llevo toda la mañana con la historia de grabar arrays en archivo que hasta ahora me iba bien, pero eso de utilizar el mismo archivo para 2 programas y cargarlos en array y tener que guardarlos del Array, uffffffffffffffffff:(:confused:....


Código:

procedure TPagesDlg.guardadades;
 Var F: file of TUsuari;
        I:Integer;
        s:String;
 begin
  AssignFile(F,'c:\Usuari.txt');
  Rewrite(F);
  For I:=Low(Usuari) to High(Usuari) do
        Write(F,Usuari[i]);
        CloseFile(F);
 end;


alfredosg19 26-03-2005 12:13:15

Ha!, se me olvidaba.
 
Muchas gracias por cualquier ayuda o aportación.:D

Lepe 26-03-2005 13:20:34

Algo así ??
Código Delphi [-]
procedure TPagesDlg.guardadades;
 Var F: file of TUsuari;
   I:Integer;
   s:String;
 begin
   AssignFile(F,'c:\Usuari.txt');
   Rewrite(F);
   Seek(F, FileSize(F);
   For I:=Low(Usuari) to High(Usuari) do
   Write(F,Usuari[i]);
   CloseFile(F);
 end;
Saludos

alfredosg19 26-03-2005 13:35:41

Sigue el mismo problema.
 
He incluido la función Seek pero es igual, sigue sobrescribiendo el archivo. Gracias.

Lepe 26-03-2005 13:36:53

Upps, me pasé de listo, el problema está en el Rewrite:
Cita:

Empezado por Ayuda de delphi
If an external file with the same name already exists, it is deleted and a new empty file is created in its place.

If F is already open, it is first closed and then re-created. The current file position is set to the beginning of the empty file.

Useasé, quita el rewrite

Lepe 26-03-2005 13:38:13

Por cierto, esto es un foro o un chat ? :D

Saludos

Lepe 26-03-2005 13:53:38

Me queda una duda, que en la ayuda no lo dice, despues de usar AssignFile, el descriptor del archivo donde queda?, al principio, en medio, al final ???
Lo mejor es asegurarse:
Código Delphi [-]
procedure TPagesDlg.guardadades;
 Var F: file of TUsuari;
   I:Integer;
   s:String;
 begin
   AssignFile(F,'c:\Usuari.txt');

  fileMode := fmOpenReadWrite;
   Reset(F); 
   Seek(F, FileSize(F);
   For I:=Low(Usuari) to High(Usuari) do
   Write(F,Usuari[i]);
   CloseFile(F);
 end;
Saludos

alfredosg19 26-03-2005 14:26:36

Perdón Lepe.
 
Uyyyy:rolleyes:, pues resulta que según yo me sobreescribía los datos porque a la hora de guardarlo lo guardaba bien en 'C:\usuari.txt' y esto está protegido con la función if fileExist(), pero a la hora de leer los datos del archivo los leía de 'usuari.txt' y claro no leía nada y grababa los datos en la primera fila del archivo por lo que todo estaba bien(excepto la dirección del archivo que debía ser 'C:\usuari.txt'), ha sido un despiste que me ha hecho perder 3 horas. Lo del Seek sí que funciona, muchas gracias por tu ayuda, y disculpa si te he hecho perder tu tiempo por un despiste mío, en mi favor puedo decir que trabajo simultáneamente con dos programas en código fuente y que ambos superan las 2.000 lineas seguramente para gente experiementada esto no es nada, pero para mí es el primer proyecto de este tipo que hago y estoy pecando de novato. Lo que me parece tan increible es que errores tan tontos y tan evidentes sean los más tiempo nos hacen perder (para encontrar el error que tenía he tenido que ir con el Step). ¡¡¡¡Gracias Lepe!!!!.;)


La franja horaria es GMT +2. Ahora son las 23:26:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi