Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2015
xaviroch xaviroch is offline
Registrado
 
Registrado: ene 2009
Posts: 4
Poder: 0
xaviroch Va por buen camino
Varios tipos de datos en un fichero

Buenos dias,

Estoy intentando crear un fichero en el que quiero guardar diferentes tipos de variables, pero no lo consigo, solo se guardarun tipo de variable.

Código Delphi [-]
type
  tipo1 = record
      .....
  end;
  tipo2 = record
     .....
  end;
var
  f : file 
  t1 : tipo1
  t2 : tipo2
begin
  assignfile(f,'prueba.dat');
  rewrite(f);
  write(f,t1);
  write(f,t2);
  closefile(f);
end;


Esta seria basicamente la estructura que no funciona.

Gracias!
Responder Con Cita
  #2  
Antiguo 04-10-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No podemos adivinar exactamente qué problema tienes, cómo lo estás haciendo, qué quieres conseguir, etc.
Además, ¿en los puntos consecutivos qué código va? Pon el código, no podemos adivinar
Responder Con Cita
  #3  
Antiguo 04-10-2015
xaviroch xaviroch is offline
Registrado
 
Registrado: ene 2009
Posts: 4
Poder: 0
xaviroch Va por buen camino
Ok, quiza he dado poca información. Es un programa de diseño grafico tipo CAD, con vectores, puntos y textos entre otros objetos. Lo que necesito es guardar todos estos datos en un fichero.

Código Delphi [-]
type
  tvector = record
      p1,p1 : Tpointer;
      col : TColor;
  end;
  ttexto = record
     pos : TPointer;
     text : String[50];
     col: TColor;
  end;
var
  f : file 
  vec : array of tvector
  texto : array of ttext
  punto : array of tpoint;
  t : integer;
begin
  assignfile(f,'prueba.dat');
  rewrite(f);
  for t:=0 to length(vec) do write(f,vec[t]);
  for t:=0 to length(texto) do write(f,texto[t]);
  for t:=0 to length(punto) do write(f,punto[t]);
  closefile(f);
end;

El problema es que tendria de definir F como file of TVect, pero entonces ya no puedo guardar mas datos.
Posiblemente podria escribir todos los datos, "tipo" a "tipo", añadiendolo al final del fichero, pero despues no sabria como abrir el fichero, espero explicarme.

Espero que me podais ayudar.

Gracias de antemano
Responder Con Cita
  #4  
Antiguo 04-10-2015
Avatar de BDWONG
BDWONG BDWONG is offline
Miembro
NULL
 
Registrado: nov 2013
Posts: 113
Poder: 11
BDWONG Va por buen camino
Cool Hola

Puedes darle una revisada a la funciones BlockRead y BlockWrite estas no necesitan definr un File of type

mira te dejo un pequeño ejemplo que hice

Código Delphi [-]
uses
  SysUtils,Types ;

type
  TVector = record
      punto: TPoint;
      color:string[50];
  end;
  TTexto = record
     pos : TPoint;
     text :String[50];
     col: integer;
  end;
var
  myFile : file;
  vec,vecLeido :TVector;
  texto :TTexto;
begin
  //asignamos valores al record vec de tipo TVector
  vec.punto.X:=10;
  vec.punto.Y:=18;
  vec.color:='rojo';

  //asociamos el fichero con la variable
  assignfile(myFile,'prueba.dat');

  //Escribimos el bloque de memoria
  rewrite(myFile,SizeOf(vec));
  BlockWrite(myFile,vec,1);
  closefile(myFile);

  //Leemos el bloque de memoria
  Reset(myFile,SizeOf(vec));
  BlockRead(myFile,vecLeido,1);
  closeFile(myFile);

  //Escribimos los valores
  Writeln(vecLeido.punto.x);
  Writeln(vecLeido.punto.y);
  Writeln(vecLeido.color);
  Readln;

end.


link de ayuda:
http://www.delphibasics.co.uk/RTL.asp?Name=BlockWrite
http://www.delphibasics.co.uk/RTL.asp?Name=BlockRead

Saludos...
Responder Con Cita
  #5  
Antiguo 04-10-2015
xaviroch xaviroch is offline
Registrado
 
Registrado: ene 2009
Posts: 4
Poder: 0
xaviroch Va por buen camino
Como odria cambiar el tamaño de los datos a mitad de fichero? Es decir:

//creamos fichero
rewrite(myFile,SizeOf(vec));
...
//cambiamos tamaño del registro
reset(myFile,SizeOf(texto));
...

o se como podria hacerse....
Responder Con Cita
  #6  
Antiguo 05-10-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por xaviroch Ver Mensaje
Como odria cambiar el tamaño de los datos a mitad de fichero?
No se puede.

De todas formas, tienes que revisar cómo funciona la memoria y qué representa cada tipo de dato. Se evidencia en que lo tienes poco asimilado al intentar guardar un puntero en un archivo de disco.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #7  
Antiguo 05-10-2015
xaviroch xaviroch is offline
Registrado
 
Registrado: ene 2009
Posts: 4
Poder: 0
xaviroch Va por buen camino
Hola Ñuño, no quiero guardar el puntero, de echo, en mi programa ya guardo los datos, pero ahora lo que quiero añadir es otro tido de dato en el mismo fichero.

Un fichero deberia de tener esta estructura:

Primero los datos de varios vectores (Tvector)
Despues los datos de varios Puntos (TPointer)
Despues los datos de varios Textos (TTexto)

Al crear/abrir uin fichero me hace definir el tamaño de bloque de datos, por ejemplo TVector, entonces luego ya no puedo escribir/leer otro tipo de dato con un tamaño diferente.

Perdon por ser insistente, pero estoy seguro que hay una manera "facil" de hacerlo y no la encuentro.
Responder Con Cita
  #8  
Antiguo 05-10-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Acabo de releer, y resulta que donde pones TPointer leí Pointer. Mis disculpas.

De todas formas, y hasta donde sé, no pueden cambiarse los tamaños de registro en un archivo abierto.

La forma "fácil", como tú dices, consiste en guardar cada campo por separado, tal como explica BDWONG. Créeme que es la más sencilla y mejor, en este caso.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tipos de Datos novato_erick OOP 5 28-07-2012 18:19:12
Tipos de Datos Incompatibles? martini002 Varios 3 19-05-2012 09:27:39
tipos de datos estándar? javigh MS SQL Server 1 20-10-2007 18:39:21
Varios Tipos en una misma tabla JoanKa Firebird e Interbase 9 10-03-2005 11:18:30
Reto Para Expertos En Base De Datos Y Tipos De Datos.... (blob) frankmch Conexión con bases de datos 2 08-09-2003 20:44:52


La franja horaria es GMT +2. Ahora son las 14:36:08.


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