Skip to content

Limpiar una cadena de caracteres

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;