<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=ISO-8859-15>
<META content="MSHTML 6.00.6000.16850" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT face=Arial>1ro No tengo acceso a Internet: por lo que no puedo buscar 
por esa vía.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>2do Se que while es una palabra reservado de muchos 
lenguajes de programación: pero cuando digo función while me refiero a la acción 
que hace while dentro del lenguaje que en difinitiva debe ser una función 
interna del lenguaje.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>3ra te copio textual lo que dice el archivo rtl.pdf que me 
hizo llegar un miebro de la lista que lamentablemente no recuerdo ahora quien 
fue.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><B><FONT face=NimbusSanL-Bold>
<P align=left>36.9.25 Break</P></B></FONT><FONT face=NimbusSanL-Regu 
size=2><FONT face=NimbusSanL-Regu size=2>
<P align=left>Synopsis: </FONT></FONT><FONT face=NimbusRomNo9L-Regu size=2><FONT 
face=NimbusRomNo9L-Regu size=2>Exit current loop 
construct.</P></FONT></FONT><FONT face=NimbusSanL-Regu size=2><FONT 
face=NimbusSanL-Regu size=2>
<P align=left>Declaration: </FONT></FONT><FONT face=NimbusMonL-Regu size=2><FONT 
face=NimbusMonL-Regu size=2>procedure Break</P></FONT></FONT><FONT 
face=NimbusSanL-Regu size=2><FONT face=NimbusSanL-Regu size=2>
<P align=left>Visibility: </FONT></FONT><FONT face=NimbusRomNo9L-Regu 
size=2><FONT face=NimbusRomNo9L-Regu size=2>default</P></FONT></FONT><FONT 
face=NimbusSanL-Regu size=2><FONT face=NimbusSanL-Regu size=2>
<P align=left>Description: </FONT></FONT><FONT face=NimbusMonL-Regu size=2><FONT 
face=NimbusMonL-Regu size=2>Break </FONT></FONT><FONT face=NimbusRomNo9L-Regu 
size=2><FONT face=NimbusRomNo9L-Regu size=2>jumps to the statement following the 
end of the current repetitive statement. The code</P>
<P align=left>between the </FONT></FONT><FONT face=NimbusMonL-Regu size=2><FONT 
face=NimbusMonL-Regu size=2>Break </FONT></FONT><FONT face=NimbusRomNo9L-Regu 
size=2><FONT face=NimbusRomNo9L-Regu size=2>call and the end of the repetitive 
statement is skipped. The condition of the</P>
<P align=left>repetitive statement is NOT evaluated.</P>
<P align=left>This can be used with </FONT></FONT><FONT face=NimbusMonL-Regu 
size=2><FONT face=NimbusMonL-Regu size=2>For</FONT></FONT><FONT 
face=NimbusRomNo9L-Regu size=2><FONT face=NimbusRomNo9L-Regu size=2>, 
var{repeat} and </FONT></FONT><FONT face=NimbusMonL-Regu size=2><FONT 
face=NimbusMonL-Regu size=2>While </FONT></FONT><FONT face=NimbusRomNo9L-Regu 
size=2><FONT face=NimbusRomNo9L-Regu size=2>statements.</P>
<P align=left>Note that while this is a procedure, </FONT></FONT><FONT 
face=NimbusMonL-Regu size=2><FONT face=NimbusMonL-Regu size=2>Break 
</FONT></FONT><FONT face=NimbusRomNo9L-Regu size=2><FONT face=NimbusRomNo9L-Regu 
size=2>is a reserved word and hence cannot be redefined.</P></FONT></FONT><FONT 
face=NimbusSanL-Regu size=2><FONT face=NimbusSanL-Regu size=2>
<P align=left>Errors: </FONT></FONT><FONT face=NimbusRomNo9L-Regu size=2><FONT 
face=NimbusRomNo9L-Regu size=2>None.</P></FONT></FONT><FONT face=NimbusSanL-Regu 
size=2><FONT face=NimbusSanL-Regu size=2>
<P align=left>See also: </FONT></FONT><FONT face=NimbusRomNo9L-Regu size=2><FONT 
face=NimbusRomNo9L-Regu size=2>Continue (</FONT></FONT><FONT 
face=NimbusRomNo9L-Regu color=#0000ff size=2><FONT face=NimbusRomNo9L-Regu 
color=#0000ff size=2><FONT face=NimbusRomNo9L-Regu color=#0000ff 
size=2>1234</FONT></FONT></FONT><FONT face=NimbusRomNo9L-Regu size=2><FONT 
face=NimbusRomNo9L-Regu size=2>), Exit (</FONT></FONT><FONT 
face=NimbusRomNo9L-Regu color=#0000ff size=2><FONT face=NimbusRomNo9L-Regu 
color=#0000ff size=2><FONT face=NimbusRomNo9L-Regu color=#0000ff 
size=2>1246</FONT></FONT></FONT><FONT face=NimbusRomNo9L-Regu size=2><FONT 
face=NimbusRomNo9L-Regu size=2>)</P></FONT></FONT><B><FONT face=NimbusSanL-Bold 
size=2><FONT face=NimbusSanL-Bold size=2>
<P align=left>Listing: </B></FONT></FONT><FONT face=NimbusSanL-Regu size=2><FONT 
face=NimbusSanL-Regu size=2>./refex/ex87.pp</FONT></FONT></P>
<P align=left><FONT face=NimbusSanL-Regu size=2><FONT face=NimbusSanL-Regu 
size=2><FONT face=Arial size=3>4to Acabo de probar con la (palabra reservada) 
continue y también da error al entrar en el 
while.</FONT></FONT></FONT></P></DIV>
<DIV><FONT face=Arial>En otro mensaje mando la imagen del error para que 
veas.</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial>Saludos</FONT></DIV>
<DIV>=========<BR>¦¦ ISMAEL ¦¦<BR>=========<BR>----- Mensaje original ----- 
</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>De:</B> <A 
  title=raistware@gmail.com href="mailto:raistware@gmail.com">Raistware</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Para:</B> <A 
  title=lazarus-es@lists.lazarus.freepascal.org 
  href="mailto:lazarus-es@lists.lazarus.freepascal.org">Spanish version of 
  Lazarus List</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Enviado:</B> lunes, 23 de noviembre de 2009 
  10:41</DIV>
  <DIV style="FONT: 10pt arial"><B>Asunto:</B> Re: [Lazarus-es] Error en funci?n 
  while</DIV>
  <DIV><BR></DIV>Ismael L. Donis Garc?a escribió: 
  <BLOCKQUOTE cite=mid:0DB8BE9F46FC4627BA11E00B18F75A57@desarrollo type="cite"><PRE wrap="">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.
  </PRE></BLOCKQUOTE><BR>Saludos:<BR>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, <B>while</B> no es ninguna función, es una 
  palabra reservada, algo drásticamente distinto.<BR>'<B>break</B>' funciona 
  para 'romper' bucles, en C y derivados. En pascal '<B>break</B>', que yo 
  recuerde, solo tiene uso en un <B>case ... of</B>. Para bucles se utiliza 
  '<B>Continue</B>', que lo que hace es continuar con el siguiente. En tu 
  ejemplo, un simple <B>continue </B>te basta, puesto que ya has puesto una de 
  las condiciones en el while para que salga: bolhenc <> false<BR><BR>
  <BLOCKQUOTE cite=mid:0DB8BE9F46FC4627BA11E00B18F75A57@desarrollo type="cite"><PRE wrap="">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.

  </PRE></BLOCKQUOTE><BR>
  <P>
  <HR>

  <P></P>_______________________________________________<BR>Lazarus-es mailing 
  list<BR>Lazarus-es@lists.lazarus.freepascal.org<BR>http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es<BR></BLOCKQUOTE></BODY></HTML>