Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Diacrítico (https://www.clubdelphi.com/foros/showthread.php?t=27331)

ariefez 17-11-2005 17:26:50

Diacrítico
 
Se puede quitar el diacrítico de las letras.

Por ejemplo:
á = a
ô = o
Ä = A

jhonny 17-11-2005 17:52:42

Que bueno que se pueda

marcoszorrilla 17-11-2005 18:02:03

Código Delphi [-]
 cCadena:= LoQueSea;
 StringReplace(cCadena, 'ó', 'o', rfReplaceAll);

Supongo que quieres decir substituir un carácter por otro:
camión --> camion ?

Un Saludo.

ariefez 17-11-2005 18:56:12

algo asi seria, pero, en general no hay alguna forma de reemplazar todos, por ejemplo para pasar un string o un caracter a minusculas usaria la funcion de Delphi (Con sus limitaciones)

Código Delphi [-]
function LowerCase(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do
  begin
    Ch := Source^;
    if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;
pero si vemos la funcion esta echa de forma general, osea q todo depende de una linea de codigo:

Código Delphi [-]
    if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
no hay alguna forma de hacer una funcion q al pasar como parametro un Char este me devuelva como resultado la letra sin su diacrítico; por ejemplo:

Código Delphi [-]
function SinDiacritico(const C: Char): Char; //O algo por el estilo
begin
...
end;
 
{Llamada de la funcion}
...
C := SinDiacritico('á'); //El valor de C seria 'a'
C := SinDiacritico('ô'); //El valor de C seria 'o'
C := SinDiacritico('Û'); //El valor de C seria 'U'
...
Agradesco cualquier sugerencia, nos escribimos luego.

dec 17-11-2005 20:51:26

Hola,

No estoy seguro de que sea lo apropiado, pero, en este Hilo Federico puede ayudarte. :D

roman 17-11-2005 20:57:22

Cita:

Empezado por jhonny
Que bueno que se pueda

:D

Y también se pueden quitar los signos de interrogación.

// Saludos

jhonny 18-11-2005 00:09:28

Cita:

Empezado por roman
Y también se pueden quitar los signos de interrogación.

Y tambien el Hola, el por favor, y muchas cosas mas

ariefez 18-11-2005 03:33:07

Gracias por sus respuestas era lo q estaba buscando.

Una cosa mas, al ver el hilo q pusiste, veo q no usan ninguna regla, no es tan simple como pasar a minusculas.

Una pregunta aparte: ¿como hace el SO para saber q caracter le corresponde al presionar: ´ y luego a me muestre á ? :confused:

Al González 18-11-2005 06:12:51

¡Hola Ariefez!

Hace algunos años me hice la misma pregunta que tú (aunque con «signos de interrogación» ;)). Investigando en la vasta ayuda de la API de Windows —Win32.hlp—, encontré que la función MultiByteToWideChar puede utilizarse para obtener la composición de un carácter con diacrítico (Windows mantiene una relación de los caracteres diacríticos y sus posibles composiciones con diferentes letras). Para esto, hay que indicar el parámetro mb_Composite al llamar a la función.

Pero como muchas otras funciones de la API de Windows, MultiByteToWideChar resulta un poco pomposa a la hora de llamarla: sólo acepta cadenas PChar, debes darle el buffer donde guardará el resultado y ¡demanda seis parámetros! :eek:; y por si fuera poco también descompone la letra eñe (en tilde + ene). Quizá te convenga crear una función que encapsule, controle y simplifique el uso de MultiByteToWideChar para quitar los diacríticos de una cadena en castellano, lo cual también yo hice en mi biblioteca de funciones Delphi (si quieres una copia, sólo envíame un correo).

Espero esto sea de utilidad, seguimos en contacto.

Un abrazo agudo, grave y circunflejo.

Al González. :)

ariefez 18-11-2005 15:12:47

Basta un pequeño empujon para ir a donde sea
 
Gracias a todos por responder a mis dudas y especialmente a Al González era lo que en realidad estaba buscando. voy a probar la funcion y a ver q sale. Nos vemos, sera hasta la proxima. :D


La franja horaria es GMT +2. Ahora son las 16:19:30.

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