¿Existe una búsqueda de cadenas de Boyer-Moore y una función de búsqueda y reemplazo rápido y un recuento de cadenas rápido para Delphi 2010 String (UnicodeString)?
Necesito tres funciones rápidas en cadenas grandes: búsqueda rápida, búsqueda y reemplazo rápidos y conteo rápido de subcadenas en una cadena.
Me he encontrado con las búsquedas de cadenas de Boyer-Moore en C ++ y Python, pero el único algoritmo de Delphi Boyer-Moore utilizado para implementar la búsqueda y el reemplazo rápidos que he encontrado es parte de FastStrings de Peter Morris, anteriormente del software DroopyEyes, y su sitio web y el correo electrónico ya no funcionan.
Ya he portadoFastStrings Esperamos trabajar muy bien para AnsiStrings en Delphi 2009/2010, donde un byte es igual a un AnsiChar, pero hacer que también funcionen con String (UnicodeString) en Delphi 2010 parece no trivial.
Usando este algoritmo de Boyer-Moore, debería ser posible realizar búsquedas sin distinción entre mayúsculas y minúsculas, así como búsqueda y reemplazo sin distinción entre mayúsculas y minúsculas, sin ninguna cadena temporal (usando StrUpper, etc.) y sin llamar a Pos (), que es más lento que Boyer- Moore busca cuando se requieren búsquedas repetidas sobre el mismo texto.
(Editar: Tengo una solución parcial, escrita como respuesta a esta pregunta, está casi al 100% completa, incluso tiene una función de reemplazo de cadena rápida. Creo que DEBE tener errores, y especialmente creo que ya que pretende ser Unicode capaz de que haya fallas debido a promesas de Unicode incumplidas).
(Edición2: Resultado interesante e inesperado; El gran tamaño de la pila de una tabla de puntos de código Unicode en la pila - SkipTable en el código a continuación pone un serio obstáculo en la cantidad de optimización de ganar-ganar que puede hacer aquí en un boyer de cadena Unicode -Más búsqueda de cadenas. Gracias a Florent Ouchet por señalar lo que debería haber notado de inmediato.)