Hola Ibidi.
Sólo como comentario, se puede efectuar con ambas estructuras de repetición. Por ejemplo, los siguientes códigos son equivalentes:
Código Delphi
[-]
procedure MostrarConWhile(aFileName: TFileName; nFicha: Integer; LB: TListBox);
var
F: TextFile;
Cadena: string;
begin
AssignFile(F, aFileName);
try
Reset(F);
except
raise Exception.Create('Archivo no encontrado');
end;
Readln(F, Cadena);
while not Eof(F) and (nFicha = StrToInt(Trim(Copy(Cadena,1,6)))) do
begin
LB.Items.Add(Cadena); Readln(F, Cadena);
end;
CloseFile(F);
end;
Código Delphi
[-]
procedure MostrarConRepeat(aFileName: TFileName; nFicha: Integer; LB: TListBox);
var
F: TextFile;
Cadena: string;
begin
AssignFile(F, aFileName);
try
Reset(F);
except
raise Exception.Create('Archivo no encontrado');
end;
repeat
Readln(F, Cadena);
if nFicha = StrToInt(Trim(Copy(Cadena,1,6))) then LB.Items.Add(Cadena); until Eof(F) or (StrToInt(Trim(Copy(Cadena,1,6))) <> nFicha);
end;
La diferencia es que en el ciclo
while se comprueba la condición al ingresar, de allí que sea necesaria la lectura previa.
Con
repeat es innecesaria la lectura previa, pero hay que verificar la condición antes de ejecutar la acción, de otro modo la ejecutaría al menos una vez. Lo mismo sucedería al leer el elemento posterior al último que satisfizo la condición.
De todos modos, creo que la solución mas simple es la que usaste (
TStringList).
Saludos