¿Hay alguna función Delphi D2010 como PosEx que encuentre una subcadena dentro de una cadena comenzando desde el final de la cadena?¿Alguna función Delphi incorporada como PosEx que encuentra una subcadena comenzando desde la parte posterior de la cadena?
estoy quitando todas las llamadas a la biblioteca FastStrings y una de las funciones que estaba usando era FastPosBack:
function FastPosBack(const aSourceString, aFindString : AnsiString; const aSourceLen, aFindLen, StartPos : Integer) : Integer;
encontré LastDelimiter pero no es exactamente lo mismo, ya que sólo encuentra el último delimitador y no puedo especificar una posición de inicio.
Gracias!
actualización: DR siguiente comentario, he creado esta función:
function FastPosBack(const aSourceString, aFindString : String; const aSourceLen, aFindLen, StartPos : Integer) : Integer;
var
RevSourceString, RevFindString: string;
begin
RevSourceString := AnsiReverseString(aSourceString);
RevFindString := AnsiReverseString(aFindString);
Result := Length(aSourceString) - PosEx(RevFindString, RevSourceString, StartPos) + 1;
end;
¿Hay alguna forma más eficaz de hacer esto? En un ciclo de ciclo de 1000000, Pos tarda 47 ms, mientras que FastPosBack tarda 234 ms en completarse.
Sólo por curiosidad: ¿cómo era tu prueba como exactamente? – jpfollenius
Llamo a GetTickCount, seguido de un bucle 1000000 de la llamada a la función y luego obtengo la diferencia, GetTickCount - TickCount. – smartins
Estaba más interesado en qué cadenas pasa a las funciones para probar ... – jpfollenius