Título: Pascal y ficheros... Publicado por: Corso en 24 Enero 2006, 20:55 pm Problema con otro code...
Código:
Como veis, lo que hace el programa, es pedir si kieres meter los datos por el teclado, o usar un fichero para leerlo... Lógicamente la primera vez que se ejecute el programa, se tendrá que elegir la opción T, para meter los datos. Estos datos son escritos en un fichero... Hasta aquí parece que todo fuca bien. Poro cuando llamo otra vez al programa, y le doy la opción F (fichero), para que me muestre por pantalla los datos que hay en ese fichero, se termina la ejecución del programa, sin mostrar nada... Por que? Y como lo hago? Salu2. Título: Re: Pascal y ficheros... Publicado por: jvchino en 25 Enero 2006, 07:56 am El código que has hecho es un poco difícil de modificar, necesita hacer muchos arreglos para lograr los resultados que deseas. Luego verás los motivos.
Primero: No te muestra los datos porque no se lo indicas. ¿Qué te parece si empleas la sentencia "WRITE"? Código: procedure lee_fichero(nombre:string; VAR cuadros:Tcuadro); O mejor aún empleas el procedimiento "imprime_cuadro" Código: procedure lee_fichero(nombre:string; VAR cuadros:Tcuadro); Ejecuta ahora el programa y verás los resultados. ¿No es lo que esperabas... verdad? Eso sucede porque tu archivo solo tiene guardado un registro, debido a que la sentencia "rewrite" (reescribir) abre un archivo, borra todo su contenido y graba los nuevos datos. Es decir cuando se ejecuta esta línea: graba_fichero(nombre, cuadro1); se guardan los datos del cuadro1 correctamente. Pero en la siguiente línea: graba_fichero(nombre, cuadro2); está el error. Ya que se abre el archivo, se destruye su contenido y se reemplaza por los del segundo cuadro. Con lo cual al final el archivo tendrá un solo registro con los datos del cuadro2. Posibles Soluciones 1) Abrir el fichero y no cerrarla hasta que se ingresen todos los datos. Más o menos así: Si se trata del primer cuadro Abrir fichero Escribir datos Dejar el fichero abierto Si se trata del segundo fichero Escribir datos Cerrar fichero Código: procedure graba_fichero(nombre:string; VAR cuadros:Tcuadro; ind:integer); Una modificación similar debes hacer en el procedimiento "lee_fichero" 2) Otra opción (mucho mejor que la anterior) es el uso de un array de registros Código: Type Un array que almacene los datos de todos los cuadros, así el procedimiento, quedaría: Código: procedure graba_fichero(nombre:string; todosloscuadros:Tcoleccion); Saludos. Título: Re: Pascal y ficheros... Publicado por: skapunky en 5 Febrero 2006, 16:52 pm Hola corso, yo me uno a ayudarte en esto, me ha extrañado una cosa... y esque tal como esta planteado el programa, el record solo sirve para introducir datos una vez. Tendrias de declarar una variable que fuera como un contador, no se llamala "i" y que puedas ir añadiendo varios cuadros, porque tal como has puesto el codigo sirve para rellenar el registro completo de un solo cuadro.
Tendras de hacer estas modificaciones: 1º Declarar var i:integer; 2º Poner el contador de cuadros, primero un i:=0 y una vez leid a la fichas del cuadro poner i:= i+1. 3º En los readln de las características del cada cuadro, tendras de poner esta sintaxis: (cuadros.numcuadro) y asi para todo el record.También en los writeln. - Yo hize un programa identico a este y lo hize poniendo lo que te dicho, asi puedes poner opciones para leer los datos de x cuadro y añadirle mejoras de busqueda. Un saludo. |