Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manejo de Archivos Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=84672)

napsterk89 20-11-2013 01:16:16

Manejo de Archivos Delphi 7
 
Hola, estoy haciendo un trabajo para la universidad, pero me he trabado con un error de código, si alguien me ayuda a encontrarlo se lo agradecería mucho :D

Código:

var
  Form2: TForm2;
  CAlta,CMedia,CBaja: integer;
  RAlta,RMedia,RBaja:Real;
implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button3Click(Sender: TObject);
begin
Form2.Close;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
Seek(Archivo,0);

While Not Eof(Archivo) DO
  Begin
  Read(Archivo,Res);

  IF (Res.Temporada='Alta') THEN
  Begin
  CAlta:= CAlta+1;
  RAlta:= RAlta+ Res.Tarifa;
  end
  else

    IF (Res.Temporada='Media') THEN
    Begin
    CMedia:= CMedia+1;
    RMedia:= RMedia+ Res.Tarifa;
    End
    else

      IF (Res.Temporada='Baja') THEN
      Begin
      RBaja:= RBaja+ Res.Tarifa;
      CBaja:= CBaja+1;
      End;

End;



Listbox1.items.Add(IntToStr(CAlta));
  End;





end.

He recorrido el prog con F7 y me di cuenta que cuando necesita comprobar el End Of File me dice "Eof=inaccesible value" entonces directamente pasa al end, por lo tanto las variables no toman los valores. La verdad es que me encuentro desorientado.

ecfisa 20-11-2013 03:25:50

Hola napsterk89, bienvenido a Club Delphi :)

Como es costumbre con los que se inician, te invitamos a que leas nuestra guía de estilo.

No sé la finalidad del código y si la cumple, pero sintácticamente es correcto. Es decir, si las declaraciones del registro y archivo son las adecuadas, el código compila y ejecuta.

Para verificarlo crea una nueva aplicación, pone un TButton y un TListBox y realiza esta simple prueba:
Código Delphi [-]
...

implementation

type
  TRegistro = packed record
    //...
    Temporada : string[5];
    Tarifa: Single;
    //...
  end;
  TArchivo = file of TRegistro;

var
  Archivo: TArchivo;
  Res : TRegistro;
  CAlta,CMedia,CBaja: integer;
  RAlta,RMedia,RBaja:Real;

// Guardar unos datos de prueba...
procedure TForm1.FormCreate(Sender: TObject);
const
  TEMPO : array[0..2] of string = ('Alta', 'Media', 'Baja');
var
  i: Integer;
begin
  Randomize;
  AssignFile(Archivo, ExtractFilePath(Application.Exename) + 'Archivo.dat');
  try
    Reset(Archivo);
  except
    Rewrite(Archivo);
    for i:= 1 to 10 do
    begin
      Res.Temporada:= TEMPO[Random(3)];
      Res.Tarifa   := i;
      Write(Archivo,Res);
    end;
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Seek(Archivo, 0);
  while not Eof(Archivo) do
  begin
    Read(Archivo, Res);
    if (Res.Temporada='Alta') then
    begin
      CAlta:= CAlta + 1;
      RAlta:= RAlta + Res.Tarifa;
    end
    else if (Res.Temporada='Media') then
    begin
      CMedia:= CMedia + 1;
      RMedia:= RMedia + Res.Tarifa;
    end
    else 
    begin
      RBaja:= RBaja + Res.Tarifa;
      CBaja:= CBaja + 1;
    end;
  end;
  Listbox1.items.Add(IntToStr(CAlta));
end;

...

Saludos :)

Neftali [Germán.Estévez] 20-11-2013 11:55:20

¿Cómo está definido el registro?
¿Podrías poner un pequeño archivo de ejemplo para poder probarlo?


La franja horaria es GMT +2. Ahora son las 02:32:47.

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