Con esta función podremos limpiar una cadena de caracteres tanto dejando solo caracteres como también dejando solo números. Ya que hemos aprendido como utilizar una función como parámetro de otra función, utilizaremos esta técnica.
Recientemente, en uno de mis desarrollos, tenía la necesidad de limpiar una cadena de caracteres dejando solo los números para luego convertirlos en integer. De allí que me puse a escribir estas funciones, son simples pero muy útilies.
Función para limpiar una cadena de caracteres
En primer lugar vamos a crear la función SoloLetras, en la que le vamos a pasar un parámetro llamado vCadena, que sería la cadena de caracteres a limpiar. He comentado cada una de las líneas para que puedan entenderla bien.
function SoloLetras(const vCadena: string): string;
var
I: Integer;
vAux: string;
vCadenaMinusculas: string;
begin
// Inicializamos la variable Auxiliar, ya que si no hay resultados
// nos puede devolver basula de memoria
vAux := '';
// Convertimos la cadena a minusculas para comparar con el rango de letras
// de esta manera no tenemos que comparar mayúsculas y minúsculas
vCadenaMinusculas := LowerCase(vCadena);
// Recorremos cada uno de los caracteres de la vCadenaMinusculas
for I := 0 to Length(vCadenaMinusculas) - 1 do
begin
// Si el caracter esta en el rango de letras o es un espacio en blanco,
// lo guardamos en vAux
// (utilizamos la vCadenaMinusculas que es igual a vCadena
if vCadenaMinusculas[i] in ['a'..'z', ' '] then
vAux := vAux + vCadena[i];
end;
// Retornamos la variable auxiliar con solo las letras
Result := vAux;
end;
Ahora pasamos a crear la función SoloNumeros, el parámetro es el mismo, si se fijan es muy similar, cambia la línea que chequea si es número o letra.
function SoloNumeros(const vCadena: string): string;
var
I: Integer;
vAux: string;
begin
// Inicializamos la variable Auxiliar, ya que si no hay resultados
// nos puede devolver basula de memoria
vAux := '';
// Recorremos cada uno de los caracteres de la vCadena
for I := 0 to Length(vCadena) - 1 do
begin
// Si el caracter esta en el rango de los números, lo guardamos en vAux
if vCadena[i] in ['0'..'9'] then
vAux := vAux + vCadena[i];
end;
// Retornamos la variable auxiliar con solo los números
Result := vAux;
end;
Ahora creamos la función LimpiarCaracteres que recibe como parámetro la cadena de caracteres a limpiar y la función a utilizar.
type
TParametroFuncion = function(const vCadena: string): string;
...
function LimpiarCaracteres(vCadena: string; vFuncion: TParametroFuncion): string;
begin
result := vFuncion(vCadena);
end;
Modo de uso
Para utilizar estas funciones, solo debemos llamar a la función LimpiarCaracteres pasando como parámetros la cadena a limpiar y la función a utilizar, como lo mostramos a continuación dentro del evento onClick de un TButton:
procedure TForm1.Button1Click(Sender: TObject);
var
vCadenaLimpia: string;
begin
vCadenaLimpia := LimpiarCaracteres('Hola 1m5u7n8d5o.', SoloLetras);
ShowMessage(vCadenaLimpia); // Mostrará 'Hola Mundo'
vCadenaLimpia := LimpiarCaracteres('Hola 1m5u7n8d5o.', SoloNumeros);
ShowMessage(vCadenaLimpia); // Mostrará '15785'
end;