Ver Mensaje Individual
  #9  
Antiguo 02-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por McK Ver Mensaje
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'; // Con la del ejemplo anterior también funciona OK
begin
  Memo1.Lines:= ExtractNum('xx', Cadena); // muestra 33
  ShowMessage('FIN');
  Memo1.Lines:= ExtractNum('', Cadena);  // no muestra nada
  ShowMessage('FIN');
  Memo1.Lines:= ExtractNum('XX', Cadena); // muestra 979, 77, 99199, 8838
  ShowMessage('FIN');
  Memo1.Lines:= ExtractNum('xy', Cadena); // no muestra nada
  ShowMessage('FIN');
end;

¿ Podrías poner un ejemplo que te dé el ciclo infinito ? Así puedo evaluarlo.

Saludos.

Última edición por ecfisa fecha: 02-12-2010 a las 12:10:37.
Responder Con Cita