Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Manejo de tipos (https://www.clubdelphi.com/foros/showthread.php?t=33035)

miquellg 25-06-2006 18:15:56

Manejo de tipos
 
Hola compañeros,

Tengo una duda con la manipulación de estructuras que he creado en un programa, no creo que sea difícil pero soy nuevo y encuentro la solución.

Bueno, tengo un programa que debe leer registros de un fichero de texto con un formato para el cuál he creado la siguiente estructura:

Código Delphi [-]
type
  TQ19Registro = packed Record
    CodReg    : string[2];
    CodDat    : string[2];
    Nif          : String[9];
    Fecha      : string[6];
end;

Puedo leer del fichero de entrada y volcar la información del registro leido sobre la estructura creada? Cómo?

Después de trabajar la información creo 2 tipos de registros de salida (de la misma longitud) para grabarlos en otro fichero de texto:

Código Delphi [-]
type
  TQ32Reg1 = packed Record
    CodReg     : string[2];
    CodOper   : string[2];
    Filler1       : string[2];
    Info         : string[6];
end;

type
  TQ32Reg2 = packed Record
    CodReg     : string[2];
    CodOper   : string[2];
    CodPais    : string[2];
    Info2        : string[6];
end;

Puedo grabar directamente las diferentes estructuras creadas en un fichero de texto (*.txt) de salida? Cómo?

(los ficheros de trabajo están definidos como TextFile)

Gracias por la colaboración.

Sinaloense 26-06-2006 06:24:42

Tendrías que declarar el archivo de acuerdo al tipo:

Código Delphi [-]
type
  TQ32Reg1 = packed Record
    CodReg     : string[2];
    CodOper   : string[2];
    Filler1       : string[2];
    Info         : string[6];
end;

type
  TQ32Reg2 = packed Record
    CodReg     : string[2];
    CodOper   : string[2];
    CodPais    : string[2];
    Info2        : string[6];
end;

var
   Archivo1:File of TQ32Reg1;
   Archivo2:File of TQ32Reg2;
   Estructura1:TQ32Reg1;
   Estructura2:TQ32Reg2;

begin
    Assign(Archivo1,'algunaarchivo1');
    Assign(Archivo2,'algunaarchivo2');
    Reset(Archivo1);
    Reset(Archivo2);
    Read(Archivo1,Estructura1);
    Read(Archivo2,Estructura2);

    // Despues manipulas la Estructura a tu gusto    
    //y
    //Para escribir

    Write(Archivo1,Estructura1);  
    Write(Archivo2,Estructura2);
    
    CloseFile(Archivo1); 
    CloseFile(Archivo2); 
end;

Lepe 26-06-2006 11:33:23

Aqui tienes un ejemplo con TFileStream de como guardarlo todo en un mismo archivo. No es un archivo de texto.

El problema es que debes saber en qué orden se han escrito los registros en el archivo, para recuperar los tipos de datos. Se puede mejorar guardando una marca que indique qué tipo de registro viene a continuación, y entonces, leer las variables con ese Tipo de registro; así salvamos el problema anterior.

No lo he incluido en el proyecto porque no sé si es lo que quieres, ya nos comentarás, sería algo así:
Código Delphi [-]
var marca :integer;
     u: TQ19Registro;
     d: TQ32Reg1;
begin
F.Read(marca, Sizeof(marca));
if Marca = 1 then
  F.Read(u, Sizeof(TQ19Registro))
else if marca = 2 then
  F.Read(d, SizeOf(TQ32Reg1))
else.....
Saludos

miquellg 26-06-2006 13:56:44

Gracias Lepe por la información,
pero con tu ejemplo me aparecen 2 nuevos problemillas:
1- En el fichero de salida, antes de cada campo me aparece un carácter extraño.
2- Cómo escribo en el fichero el Salto de linea?

Gracias a todos.

Lepe 26-06-2006 15:46:07

Como dije, la salida es un archivo binario, no es de texto y no está pensado que se pueda modificar con el Bloc de Notas (haría fallar el programa).

Cita:

Bueno, tengo un programa que debe leer registros de un fichero de texto con un formato para el cuál he creado la siguiente estructura:
Despues de lo comentado, parece que el fichero como tal, no es un Fichero de registros, sino un fichero de texto llano, que lo lees a trozos y los metes en esos registros (tipo record) que has creado.

Sería bueno que pusieras un trozo del archivo a leer, y despues comentar qué quieres hacer con él, sin entrar en detalles de implementación, algo así como:

"Quiero leer el archivo, mantenerlo en memoria, poder hacerle modificaciones y despues guardarlo en un sólo fichero de texto, separados por comas cada campo, que se puedan modificar con el Bloc de notas ."

Si el fichero de entrada es texto plano (sin carácteres extraños) y los de salida tambien han de ser iguales, será más útil un TStringList.

Saludos

miquellg 27-06-2006 00:34:45

Gracias por tu colaboracion Lepe.
Así lo haré.


La franja horaria es GMT +2. Ahora son las 17:45:46.

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