Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con error en codigo :-( (https://www.clubdelphi.com/foros/showthread.php?t=40114)

jorgegetafe 07-02-2007 17:59:32

Ayuda con error en codigo :-(
 
Teniendo este codigo:

Código Delphi [-]
PROGRAM Pract_3a_5_4;      {$APPTYPE CONSOLE}
USES
  SysUtils, crt;
TYPE
  informacion = RECORD
  nombre: STRING[20];
  apellidos: STRING[20];
  NIF: STRING[20];
END;
  agenda = ARRAY [1..5] OF informacion;
  archivo = FILE OF informacion;
VAR
  a: agenda;
  eleccion: STRING;
  contador: integer;
  introducido: boolean;
y este procedimiento:

Código Delphi [-]
PROCEDURE grabarDatos (contador: integer);(* Guarda lo introducido en un fichero: "datos.dat" *)
  VAR
    aux: integer;
    grabado : archivo;
  BEGIN
    assign (grabado, 'Datos.dat');
    rewrite (grabado);
    FOR aux:= 1 TO contador DO
      BEGIN
        write (grabado, a[aux].nombre); (* ERROR *)
        write (grabado, a[aux].apellidos); (* ERROR *)
        write (grabado, a[aux].NIF); (* ERROR*)
        write (grabado);
      END;
    close (grabado);
  END;
Me aparecen tres errores que dicen: "incompatible types": 'informacion' and 'ShortString'. (Donde he puesto lo de (*ERROR*)

Los datos que guardo han sido pedido correctamente en otro procedimiento.

Alguien me puede ayudar a arreglarlo?

muchas gracias



roman 07-02-2007 18:14:17

¡Fácil! Quita las líneas que te dan error :D

No, ya en serio, quita las líneas que te dan error. Es que así es. Tú estás grabando en un file of informacion, de manera que lo único que acepta el procedimiento write son variables de tipo informacion; así que bastaría con:

Código Delphi [-]
write (grabado, a[aux]);

// Saludos

jhonny 07-02-2007 18:19:59

Me tome el atrevimiento de modificar tu mensaje para que veas como se deben usar las etiquetas para código Delphi ;)

jorgegetafe 07-02-2007 18:31:23

Vale muchisimas gracias, ya va perfectamente. Tambien he quitado las tres lineas y he dejado 1 sola porque asi no se repiten.

jorgegetafe 07-02-2007 19:09:56

¿y para leer el archivo resultante como se haria? (para meterlo en memoria)

Tengo puesto esto pero me da un error en tiempo de ejecucion.

Código Delphi [-]
 
PROGRAM Pract_3a_5_5;      {$APPTYPE CONSOLE}
USES
  SysUtils, crt;
TYPE
  informacion = RECORD
  nombre: STRING[20];
  apellidos: STRING[20];
  NIF: STRING[20];
END;
  agenda = ARRAY [1..5] OF informacion;
  archivo = FILE OF informacion;
VAR
  a: agenda;
  i: integer;
(******************************************************************************)
PROCEDURE leerDatos;                                                            (* Mete en memoria el contenido del fichero: "Datos.dat" *)
  VAR
    grabado: archivo;
  BEGIN
    assign (grabado, 'Datos.dat');
    reset (grabado);
    FOR i:=1 TO 5 DO
      read (grabado, a[i]);     (* Aqui da el ERROR= "project raised exception class EinOutError with message 'read beyond end of file' *)
    close (grabado);
    writeln ('Datos leeido correctamente del fichero Datos.dat.');
    writeln;
    writeln ('Pulse intro para continuar');
    readln;
  END;
(******************************************************************************)

Caral 07-02-2007 19:18:04

Hola
En este caso no se usa LoadFromFile ?
Saludos

jorgegetafe 07-02-2007 19:29:04

No me dejan usar eso...

Ya se porque fallaba, yo leia 5 veces y tenia introducido 5 personas, con esto no falla.

gracias una vez mas.

Código Delphi [-]
 
WHILE NOT EOF (grabado) DO
      BEGIN
        read (grabado, a[i]);     (* ERROR= "project raised exception class EinOutError with message 'read beyond end of file' *)
        i:=i+1;
      END;


La franja horaria es GMT +2. Ahora son las 10:10:12.

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