Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Problemas al guardar datos en un archivo.

Hola 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;
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #2  
Antiguo 26-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
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.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #3  
Antiguo 26-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 26-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
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)...., 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....


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;
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #5  
Antiguo 26-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Ha!, se me olvidaba.

Muchas gracias por cualquier ayuda o aportación.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #6  
Antiguo 26-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 26-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Sigue el mismo problema.

He incluido la función Seek pero es igual, sigue sobrescribiendo el archivo. Gracias.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #8  
Antiguo 26-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 26-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Por cierto, esto es un foro o un chat ?

Saludos
Responder Con Cita
  #10  
Antiguo 26-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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

Última edición por Lepe fecha: 26-03-2005 a las 13:56:19.
Responder Con Cita
  #11  
Antiguo 26-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Perdón Lepe.

Uyyyy, 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 perseverancia es el camino del éxito"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:19:31.


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
Copyright 1996-2007 Club Delphi