Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Eliminar acentos y otros agregados de un caracter/cadena Delphi 2009 (https://www.clubdelphi.com/foros/showthread.php?t=80893)

Cheerpipe 30-03-2009 18:29:30

Eliminar acentos y otros agregados de un caracter/cadena Delphi 2009
 
Código Delphi [-]
// 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;

Código Delphi [-]
//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.

aggg63 12-07-2011 17:37:22

Hola.

Uso Delphi 2006 y la función

extractSimbolFromMultiByteChar(Text: PAnsiChar): Char;

genera una excepción cuando finaliza. Alguna idea? Gracias.

guillotmarc 20-07-2011 14:34:15

Al igual que aggg63, en Delphi 6 también genera una excepción.

Así que he usado con éxito este código :

function BestFit(const AInput: AnsiString): AnsiString;
const
CodePage = 20127; //20127 = us-ascii
var
WS: WideString;
begin
WS := WideString(AInput);
SetLength(Result, WideCharToMultiByte(CodePage, 0, PWideChar(WS),
Length(WS), nil, 0, nil, nil));
WideCharToMultiByte(CodePage, 0, PWideChar(WS), Length(WS),
PAnsiChar(Result), Length(Result), nil, nil);
end;

http://stackoverflow.com/questions/1891196/convert-hi-ansi-chars-to-ascii-equivalent-e-e-in-delphi2007

Saludos.


La franja horaria es GMT +2. Ahora son las 22:01:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi