Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error en codigo, ¿como lo arreglo? (https://www.clubdelphi.com/foros/showthread.php?t=40247)

jorgegetafe 10-02-2007 21:02:46

Error en codigo, ¿como lo arreglo?
 
Teniendo esto:

Código Delphi [-]
 
USES
  SysUtils, crt;
TYPE
  nucleotidos = RECORD
    abreviatura: char;
    nombre: STRING [8];           (* Ponemos un limite para evitar el error: "type lista needs finalization - not allowed in file type " *)
    tipo: STRING [12];            (* Ponemos un limite para evitar el error: "type lista needs finalization - not allowed in file type " *)
  END;
  lista = ARRAY [1..5] OF nucleotidos;
  fichero =  FILE OF lista;            
  ficheroTexto = TEXT;
VAR
  ficheroTablaNucleotidos: fichero;
  eleccion: STRING;
  tipocadenas: STRING[3];
  cadena1,cadena2: STRING [255];
  yaIntroducidoTablaNucleotidos, correcto, completado3: boolean;
  a: fichero;
  b: nucleotidos;

Y luego este procedimiento:

Código Delphi [-]
 
(******************************************************************************)
PROCEDURE cargaManual;                                                          (* Se introducen los datos de la tabla a mano *)
  VAR
    i:integer;
    nombreFicheroGuardar: STRING;
  BEGIN
    FOR i:= 1 TO 5 DO
      BEGIN
        writeln ('Introduzca el nombre del fichero para guardar los datos con extension .dat incluida.');
        readln (nombreFicheroGuardar);
        assign (a, 'nombreFicheroGuardar');
        rewrite (a);
        writeln ('Introduce el nucleotico numero: ',i,'.');
        read (b.nombre);
        (* ERROR *)write (a, b);
        writeln;
        writeln ('Introduzca la letra su abreviatura');
        readln (b.abreviatura);
        b.abreviatura:= upcase(b.abreviatura);
            (* ERROR *)write (a, b);
        writeln;
        writeln ('Escribe el tipo del neucleotido.');
        read (b.tipo);
            (* ERROR *)write (a, b);
      END;
    close (ficheroTablaNucleotidos);
    yaIntroducidoTablaNucleotidos:= true;                                       (* Para que la proxima vez se introduzca por fichero *)
END;
(******************************************************************************)

Me da siempre el mismo error "(Incompatible types: 'lista and 'nucleotidos')" en cada linea que pongo: " write (a, b)". Os marco las lineas con fallo con: (* ERROR *)

Necesito ayuda porque ya estoy borracho de tanta variable y tipos, digamos que estoy en maraton de programacion :-(

¿Me podeis decir por favor que cambio? Seguro que es facil pero no lo veo.

Muchas gracias.

marcoszorrilla 10-02-2007 21:40:00

Código Delphi [-]
(******************************************************************************)
PROCEDURE cargaManual;                                                          (* Se introducen los datos de la tabla a mano *)
  VAR
    i:integer;
    nombreFicheroGuardar: STRING;
  BEGIN
    FOR i:= 1 TO 5 DO
      BEGIN
        writeln ('Introduzca el nombre del fichero para guardar los datos con extension .dat incluida.');
        readln (nombreFicheroGuardar);
        assign (a, 'nombreFicheroGuardar');
        rewrite (a);
        writeln ('Introduce el nucleotico numero: ',i,'.');
        read (b.nombre);
        (* ERROR *)write (a, b.nombre);
        writeln;
        writeln ('Introduzca la letra su abreviatura');
        readln (b.abreviatura);
        b.abreviatura:= upcase(b.abreviatura);
            (* ERROR *)write (a, b.abreviatura);
        writeln;
        writeln ('Escribe el tipo del neucleotido.');
        read (b.tipo);
            (* ERROR *)write (a, b.Tipo);
      END;
    close (ficheroTablaNucleotidos);
    yaIntroducidoTablaNucleotidos:= true;                                       (* Para que la proxima vez se introduzca por fichero *)
END;
(******

Un Saludo.

jorgegetafe 10-02-2007 22:26:52

Muchas gracias por ayudarme pero eso ya lo habia probado, si pongo lo que tu me has puesto me sale el error:
incompatible types: 'lista' and 'shortString'

se te ocurre algo mas? gracias.

Turboleta 10-02-2007 23:33:42

Primero el Tipo Fichero decláralo como File of Nucleotidos

Código Delphi [-]
fichero = File of nucleotidos

Luego, en el buble for realizas la asignación del fichero y su apertura para escritura 5 veces (sácalos fuera del for). Aunque no te diera ningún error estás posicionando el puntero, cada vez, al principio del archivo por lo que al introducir un registro destruyes al anterior, quedando en el archivo únicamente el último.

Espero haberte ayudado.

jorgegetafe 10-02-2007 23:49:46

La verdad es que me has ayudado mucho.

gracias. ;-)

Turboleta 10-02-2007 23:53:40

Prueba esto a ver si te funciona


Código Delphi [-]
PROCEDURE cargaManual;                                                          (* Se introducen los datos de la tabla a mano *)
  VAR
    i:integer;
    nombreFicheroGuardar: STRING;
  BEGIN
     writeln ('Introduzca el nombre del fichero para guardar los datos con extension .dat incluida.');
     readln (nombreFicheroGuardar);
     assign (a, 'nombreFicheroGuardar');
     rewrite (a);

    FOR i:= 1 TO 5 DO
      BEGIN
         // se leen todos los campos del registro b
         writeln ('Introduce el nucleotico numero: ',i,'.');
         read (b.nombre);
         writeln ('Introduzca la letra su abreviatura');
          readln (b.abreviatura);
          b.abreviatura:= upcase(b.abreviatura);
          writeln ('Escribe el tipo del neucleotido.');
          read (b.tipo);
          // se escribe el registro b en el fichero a
          write (a, b);
      END;
    close (ficheroTablaNucleotidos);
    yaIntroducidoTablaNucleotidos:= true;                                       (* Para que la proxima vez se introduzca por fichero *)
END;


No te garantizo que funcione pero por ahí va la cosa. No olvides que a es un archivo de registros del tipo nucleotido

jorgegetafe 11-02-2007 02:21:10

La verdad es que asi tiene mas logica la cosa. gracias.

nemesio 11-02-2007 20:36:51

En el assign, estas colocando 'nombreFicheroGuardar' entre comillas. Pues tienes que darte cuenta que es una variable. Lo lees como una variable y como tal debes colocarlo en el assign.
Quedaría asi: assign(a, nombreFicheroGuardar);

Saludos.

henrygale 13-02-2007 16:02:30

codigo
 
¿podrias pegar el codigo completo? no entiendo como has resuelto el problema de "type needs finalization".

gracias.


La franja horaria es GMT +2. Ahora son las 18:50:16.

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