Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-03-2009
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 12-07-2011
aggg63 aggg63 is offline
Miembro
 
Registrado: sep 2005
Posts: 31
Poder: 0
aggg63 Va por buen camino
Hola.

Uso Delphi 2006 y la función

extractSimbolFromMultiByteChar(Text: PAnsiChar): Char;

genera una excepción cuando finaliza. Alguna idea? Gracias.
Responder Con Cita
  #3  
Antiguo 20-07-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:03:21.


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
Copyright 1996-2007 Club Delphi