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);  {&#036;I-}  Reset(Archivo);  CodError:= IOResult;  {&#036;I+}  if CodError &#60;&#62; 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

[0] Índice de Mensajes

Ir a la versión completa