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 10-02-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 10-02-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 10-02-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 10-02-2007
Turboleta Turboleta is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 26
Poder: 0
Turboleta Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 10-02-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
La verdad es que me has ayudado mucho.

gracias. ;-)
Responder Con Cita
  #6  
Antiguo 10-02-2007
Turboleta Turboleta is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 26
Poder: 0
Turboleta Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 11-02-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
La verdad es que asi tiene mas logica la cosa. gracias.
Responder Con Cita
  #8  
Antiguo 11-02-2007
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 13-02-2007
henrygale henrygale is offline
Registrado
 
Registrado: feb 2007
Posts: 5
Poder: 0
henrygale Va por buen camino
codigo

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

gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como arreglo mis 3 Primarias? Deiv Windows 5 08-09-2006 15:05:53
Como cargar los datos de un arreglo en un dbgrid sin utilizar sql ilichhernandez Conexión con bases de datos 3 13-07-2006 19:17:20
En un stored procedure, ¿Cómo uso un arreglo como param de entrada? cuxoapat Firebird e Interbase 0 04-03-2005 18:54:42
error en el codigo pepelu1975 OOP 10 12-02-2004 13:01:03
Como devuelvo un Arreglo en Función Prophoenix Varios 1 30-05-2003 19:40:58


La franja horaria es GMT +2. Ahora son las 03:45:41.


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