2012-04-12 18 views
5

¿Hay una función en Delphi equivalente a stringByTrimmingCharactersInSet de Cocoa?Recortar cadena con juego de caracteres específico

Lo que necesito es eliminar todos los caracteres incluidos en un conjunto de caracteres que se encuentran al principio o al final de una cadena. No puede haber ninguno, uno o más comenzando o terminando la cadena ...

¿Cuál sería la forma más eficiente de hacer esto en Delphi?

Respuesta

6

Hasta donde sé, no existe una función RTL como esa. Pero puede verificar JclStrings parte de la unidad JCL project, que incluyen las funciones StrTrimCharsLeft y StrTrimCharsRight.

function StrTrimCharsLeft(const S: string; const Chars: TCharValidator): string; overload; 
function StrTrimCharsLeft(const S: string; const Chars: array of Char): string; overload; 
function StrTrimCharRight(const S: string; C: Char): string; 
function StrTrimCharsRight(const S: string; const Chars: TCharValidator): string; overload; 
function StrTrimCharsRight(const S: string; const Chars: array of Char): string; overload; 
+0

¡Gracias! Creo que la mejor solución es tomar el consejo de @David Heffernan y crear funciones JCL equivalentes "inspiradas en" en lugar de utilizar todo el framework. Espero que esto no plantee ningún problema con respecto a su licencia ... –

1

Según mi leal saber y entender, el RTL no incluye dicha función. Se podría utilizar expresiones regulares para llenar el vacío:

function MyTrim(const Input: string; const TrimChars: string): string; 
begin 
    Result := TRegEx.Replace(Input, Format('^[%s]*', [TrimChars]), ''); 
    Result := TRegEx.Replace(Result, Format('[%s]*$', [TrimChars]), ''); 
end; 

Estoy bastante seguro de que esto no es la mejor solución de la realización, pero sería difícil encontrar algo mucho más simple.

+0

Gracias David! Su solución funciona fine.I'm va a hacer algunas pruebas de rendimiento contra la otra solución mencionada (JCL) y publicar los resultados here.Performance es clave para este proyecto. –

+0

La expresión regular no será más rápida que el código JCL. ¿El recorte de cadenas realmente es el cuello de botella para su proyecto? –

+0

Estoy trabajando en un proyecto NLP. La versión de framework anterior es Obj-C. Ahora estoy traduciendo a Delphi para tener una versión de Windows. El análisis es pesado en modo de aprendizaje. Esta función se llama al menos una vez por palabra analizada. Estoy analizando libros enteros. Usar JCL solo para esto se siente como usar un martillo para matar a una hormiga ... No necesita ser más rápido, simplemente no demasiado lento. –

Cuestiones relacionadas