Cita:
Empezado por McK
No me está funcionando tu código amigo. Siempre me detecta el primer substring por lo que se queda en un bucle infinito..
|
Mi amigo, acabo de copiar y pegar el código de la función y funciona correctamente.
Te adjunto la prueba:
Código Delphi
[-]
function ExtractNum(Sub, Str: string): TStrings;
var
i, p: Integer;
begin
Result:= TStringList.Create;
p:= 1;
while p <> 0 do
begin
p:= Pos(Sub, Str);
if p > 0 then
begin
Inc(p, Length(Sub));
i:= 1;
while Str[p + i] in ['0'..'9'] do Inc(i);
Result.Add(Copy(Str, p, i));
Inc(p, i);
Str:= Copy(Str, p, MaxInt);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
Cadena = 'XX979ASDB12XX77DT12ADSXX99199ABCXX8838xx33'; begin
Memo1.Lines:= ExtractNum('xx', Cadena); ShowMessage('FIN');
Memo1.Lines:= ExtractNum('', Cadena); ShowMessage('FIN');
Memo1.Lines:= ExtractNum('XX', Cadena); ShowMessage('FIN');
Memo1.Lines:= ExtractNum('xy', Cadena); ShowMessage('FIN');
end;
¿ Podrías poner un ejemplo que te dé el ciclo infinito ? Así puedo evaluarlo.
Saludos.