[Lazarus-es] Error en funci?n while

Raistware raistware en gmail.com
Lun Nov 23 17:41:24 CET 2009


Ismael L. Donis Garc?a escribió:
> He estado todo este fin de semana atascado en un error que me da la función 
> while, he tratado por todas las vías que conozco y no he podido solucionar 
> el problema.
>   

Saludos:
Lo primero, busca un poco por internet tutoriales básicos de Pascal, en 
especial referente a bucles, porque tienes un lio que no te enteras. Lo 
segundo, *while* no es ninguna función, es una palabra reservada, algo 
drásticamente distinto.
'*break*' funciona para 'romper' bucles, en C y derivados. En pascal 
'*break*', que yo recuerde, solo tiene uso en un *case ... of*. Para 
bucles se utiliza '*Continue*', que lo que hace es continuar con el 
siguiente. En tu ejemplo, un simple *continue *te basta, puesto que ya 
has puesto una de las condiciones en el while para que salga: bolhenc <> 
false

> Al ejecutar la función while en una función que a la ves es llamada por otra 
> función y que esta otra función es llamada por un evento, me ocurre el 
> error.
>
> Le adjunté en otro mensaje un proyecto de ejemplo pero fue retenido, el 
> mismo tenía sintise del error para ver si me
> pueden ayudar o es algún error del lazarus o del fpc.
>
> Por lo que copio y pego el código del formulario para que pueda ser 
> revisado, es un formulario con 1 boton.
>
> unit uprueba;
>
> {$mode objfpc}{$H+}
>
> interface
>
> uses
>   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, 
> Dialogs,
>   StdCtrls, StrUtils;
>
> type
>
>   { TForm1 }
>
>   TForm1 = class(TForm)
>     Button1: TButton;
>     procedure Button1Click(Sender: TObject);
>     procedure FormShow(Sender: TObject);
>   private
>     { private declarations }
>     function datos(): Boolean;
>   public
>     { public declarations }
>     function IniExistHead(fileini: string; head: string): boolean;
>   end;
>
> var
>   Form1: TForm1;
>
> implementation
>
> { TForm1 }
>
> procedure TForm1.Button1Click(Sender: TObject);
>   var
>     fileini: String;
> begin
>   {$IFDEF UNIX}
>     fileini := GetEnvironmentVariable ('HOME') + '/mprima.ini';
>   {$ELSE}
>     fileini := ExtractFilePath (Application.Exename) + 'mprima.ini';
>   {$ENDIF}
>   if datos () then
>     begin
>       Showmessage ('El archivo ya existía');
>       Showmessage (fileini);
>     end
>   else
>     Showmessage ('El archivo fue creado');
> end;
>
> procedure TForm1.FormShow(Sender: TObject);
> begin
>  Button1Click(sender);
> end;
>
> function TForm1.datos(): Boolean;
>   var
>     fileini: String;
>     logfile: TFileStream;
> begin
>   {$IFDEF UNIX}
>     fileini := GetEnvironmentVariable ('HOME') + '/mprima.ini';
>   {$ELSE}
>     fileini := ExtractFilePath (Application.Exename) + 'mprima.ini';
>   {$ENDIF}
>   if FileExists (fileini) then
>     if IniExistHead(fileini, 'Datos') = false then
>       result := false
>     else
>       result := true
>   else
>     begin
>       logfile := TFileStream.Create (fileini, fmCreate or fmOpenReadWrite);
>       logfile.free;
>       result := false;
>     end;
> end;
>
> function TForm1.IniExistHead(fileini: string; head: string): boolean;
>   var
>     bolhenc: boolean;
>     strlinea, strhead: string;
>     oldfileini: TextFile;
> begin
>   bolhenc := false;
>   AssignFile (oldfileini, fileini);
>   Append (oldfileini); // abre un archivo existente
>
>   showmessage ('Punto 1');
>
>   while (not bolhenc) and (not eof(oldfileini)) do
>     begin
>
>   showmessage ('Punto 2');
>
>       readln(oldfileini, strlinea);
>       strlinea := trim(strlinea);
>       if strlinea <> '' then
>         if leftstr(strlinea, 1) <> ';' then
>           if strlinea = strhead then
>             begin
>               bolhenc := true; // al documentar la proxima linea el error se 
> da aquí
>               //break; // si descomento esta linea me da error aqui
>             end;
>     end;
>   closefile(oldfileini);
>   result := bolhenc;
> end;
>
> initialization
>   {$I uprueba.lrs}
>
> end.
>
>   

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20091123/4c9eefc9/attachment-0002.html>


More information about the Lazarus-es mailing list