This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

Eliminar acentos y otros agregados de un caracter/cadena Delphi 2009

  • 0 Replies
  • 6634 Views

0 Members and 1 Guest are viewing this topic.

Offline ANTRAX

  • *
  • Administrator
  • Posts: 5849
  • Actividad:
    66.67%
  • Country: ar
  • Reputación 43
  • ANTRAX
  • Twitter: @Underc0de
    • View Profile
    • Underc0de
    • Email
Code: (delphi) You are not allowed to view links. Register or Login
// Descompone un caracter en 2 partes y retorna solo el caracter, quitando acentos y otros posibles agregados.

function extractSimbolFromMultiByteChar(Text: PAnsiChar): Char;
var
  Buffer: Char;
  Size: Integer;
begin
  Size := MultiByteToWideChar(0,0,Text,-1,nil,0);
  if (Size > 0) then
  begin
    MultiByteToWideChar(0 ,MB_COMPOSITE , Text,-1, @Buffer, Size);
    result:=Buffer;
  end;
end;

Code: (delphi) You are not allowed to view links. Register or Login
//Recorre una cadena caracter a caracter, descomponiendolo y retornando solo el caracter limpio.

function clearMultiByteChar(Text: String): String;
var
  i: Integer;
begin
  result:='';
  for I := 1 to Length(Text) do
    Result:=Result+extractSimbolFromMultiByteChar(PAnsiChar(AnsiString(text[i])));
end;

Modo de uso:

clearMultiByteChar('Este es el mejor día del año');

Retorno:

Este es el mejor dia del ano


Nótese que la "ñ" por ser un caracter compuesto tambien es descompuesto y separado en "n" + "´", por lo tanto el retorno es solo "n".

El objetivo principal de esta funcion no es el de representar texto en pantalla, si no ser una herramienta para comparaciones y otros tratamientos de texto.

De todos modos, si alguien la quisiera usar para procesar texto para ser mostrado en pantalla, no seria dificil modificar la funcion para que deje las "ñ" intactas.




« Last Edit: April 15, 2013, 11:25:04 pm by Expermicid »