Programación General > Pascal
Archivos
(1/1)
thot_ohm:
De nuevo yo trancado en éste bendito programa!!!
Ya tengo listas mis rutinas para leer y almacenar datos.
Ahora estoy intentando crear una rutina que me muestre los datos que están en el archivo por pantalla (tengo que hacer que salgan en orden alfabético y que cumplan ciertos parámetros, pero vayamos por partes). Hice esta rutina:
--- Código: Text --- procedure mostrararchivo; {Muestra los datos almacenados en el archivo} var c,l: integer; begin abrearchivo; l:= 5; with Datos do begin while not (Eof (Archivo)) do begin ClrScr; read (Archivo,Datos); c:= 5; gotoxy(c,l); write ('Nombre: '); write (nombre); c:= c + 20; gotoxy(c,l); write ('Edad: '); write (edad); c:= c + 8; gotoxy(c,l); write ('Grado: '); write (grado); c:= c + 10; gotoxy(c,l); write ('Promedio: '); write (prom :0 :2); c:= c + 15; l:= l + 1; end end; close (archivo); readln; end;
Datos es una variable donde guardo los datos almacenados en el archivo (adjunto el archivo .pas completo para quien le quiera echar un vistazo).
Ahora bien, ésta rutina, aparentemente no hace nada porque no me muestra nada en pantalla.
Las dudas:
Está bien estructurada la rutina?
Será que no estoy guardando adecuadamente en el archivo?
Agradecido de antemano por la ayuda.
Enko:
Deberías tener algo como esto:
--- Código: Text --- begin Assign(Archivo, Ruta); Reset(Archivo); while not Eof(Archivo) do begin Read(Archivo, Datos); with Datos do begin WriteLn('Nombre: ', Nombre); WriteLn('Edad: ', Edad); end end; ReadLn; Close(Archivo);end.
Por sierto, hay algo mal con el cálculo del promedio. Le ingreso como 'unica nota 2 y muestra cualquier cosa. Te recomiendo que tengas una rutina a parte para eso:
--- Código: Text --- for i := 1 to N do Sumatoria := Sumatoria + Notas[i];Promedio := Sumatoria / n; Es decir, priemero lee las notas y alamacenalas al vector, recien cuando tengas todas haz el calculo del promedio sabiendo la cantidad N de las notas.
thot_ohm:
Vamos por partes (siguiendo tu rutina):
1.- Assign(Archivo,Ruta): Esto lo hago en el procedimiento abrearchivo. ¿Es correcto hacerlo así? Me explico, al hacerlo en una rutina aparte, ¿la orden assign es válida cuando regresa al procedimiento origen?
2.- Reset(Archivo): Igualmente, se realiza en el procedimiento abrearchivo. La pregunta sería la misma que en 1.
Lo demás de esa rutina esta perfectly clear. Thanx.
En cuanto a lo del problema con el promedio,pues me quedé asi: :blink: . Yo lo he probado para adelante y para atrás y me ha funcionado. No sé si tenga que ver, pero estoy compilando con FreePascal.
Probé con el ejemplo que tu dices (el de introducirle un unico valor 2) y el resultado me da un 2.00 tan grande como la copa de un pino jejeje (es un decir).
En éste foro, uno si se siente que forma parte de algo. Gracias por eso y por la ayuda (aunque sean repetitivas las gracias, un servidor siempre estará agradecido).
thot_ohm:
Modifiqué la rutina original por la sugerencia que me dabas, quedó ésto:
--- Código: Text --- procedure mostrararchivo; {Muestra los datos almacenados en el archivo} var c,l: integer; begin abrearchivo; l:= 5; while not (Eof (Archivo)) do begin ClrScr; read (Archivo,Datos); with datos do begin c:= 5; gotoxy(c,l); write ('Nombre: ', Nombre); c:= c + 20; gotoxy(c,l); write ('Edad: ', Edad); c:= c + 8; gotoxy(c,l); write ('Grado: ', Grado); c:= c + 10; gotoxy(c,l); write ('Promedio: ', Prom:0:2); l:= l + 1; end end; readln; close (archivo); end;
El error persiste. Me explico. No muestra nada en pantalla. Qué estoy haciendo mal? Estoy más perdido que un pinguino en el desierto. Sugieranme una línea de acción please!!!
Enko:
Creo que encontré el error. <_< ;)
La rutina de Abrir Archivo parece que no se que cosa......
La cambié por
--- Código: Text --- procedure AbreArchivo;var CodError: integer;begin Assign(Archivo,Ruta); {$I-} Reset(Archivo); CodError:= IOResult; {$I+} if CodError <> 0 then ReWrite(Archivo); {si hay algun error lo sobreescribe}end; Y al parecer se arregló el problema.
Te adjunto al final el pas por si acaso porque le borre los GotosXY pensando que escribía fuera de la pantalla :o.
--- Citar ---En éste foro, uno si se siente que forma parte de algo. Gracias por eso y por la ayuda (aunque sean repetitivas las gracias, un servidor siempre estará agradecido).
--- Fin de la cita ---
Cuando hab'ia descubierto este foro pensaba lo mismo, y lo sigo haciendo :)
Navegación
Ir a la versión completa