He buscado en este y otros foros y sigo en este hilo porque tiene algo que ver mi pregunta.
Se trata de reemplazar en una cadena caracteres especiales con acentos (tildes) a caracteres sin acentos.
En un
foro de PHP he visto que en ese lenguaje se puede hacer de una manera muy simple con una única función:
Código: Seleccionar todo
$limpiar = strtr($cadena, "áäàéëèíïìóöòúüùñ", "aaaeeeiiiooouuuñ");
He estado buscando y no encuentro nada similar en Autoit.
En un
hilo del foro inglés he encontrado un código que sirve para convertir los caracteres, pero al utilizarlo veo que no hace correctamente los caracteres con tilde y mayúsculas.
Utilizando la cadena:
Este texto tiene caracteres con acentos y la función los convierte: aáÁA Séville, Ééeë
Código: Seleccionar todo
$sCadena="Este texto tiene caracteres con acentos y la función los convierte: aáÁA Séville, Ééeë"
convcar($sCadena)
Func ConvCar($sStr)
Local $aSearch = StringSplit("Š,Œ,Ž,š,œ,ž,Ÿ,¥,µ,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,Ø,Ù,Ú,Û,Ü,Ý,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,ø,ù,ú,û,ü,ý,ÿ", ",", 2)
Local $aReplace = StringSplit("S,O,Z,s,o,z,Y,Y,u,A,A,A,A,A,A,A,C,E,E,E,E,I,I,I,I,D,N,O,O,O,O,O,O,U,U,U,U,Y,s,a,a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,o,n,o,o,o,o,o,o,u,u,u,u,y,y", ",", 2)
; Sistema reemplazando todas las letras en la cadena
For $i = 0 To Ubound($aSearch) -1
$sStr = StringReplace($sStr, $aSearch[$i], $aReplace[$i],1)
Next
ConsoleWrite($sStr)
EndFunc
Devuelve: Este texto tiene caracteres con acentos y la funciOn los convierte: aaÁA SEville, eéeE
He probado con otro método, reemplazando cada una de las letras de la cadena inicial, pero parece que tampoco funciona:
Código: Seleccionar todo
$sCadena="Este texto tiene caracteres con acentos y la función los convierte: aáÁA Séville, Ééeë"
convcar($sCadena)
Func ConvCar($sStr)
Local $aSearch = StringSplit("Š,Œ,Ž,š,œ,ž,Ÿ,¥,µ,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,Ø,Ù,Ú,Û,Ü,Ý,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,ø,ù,ú,û,ü,ý,ÿ", ",", 2)
Local $aReplace = StringSplit("S,O,Z,s,o,z,Y,Y,u,A,A,A,A,A,A,A,C,E,E,E,E,I,I,I,I,D,N,O,O,O,O,O,O,U,U,U,U,Y,s,a,a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,o,n,o,o,o,o,o,o,u,u,u,u,y,y", ",", 2)
; Sistema buscando cada letra de la cadena en la matriz y reemplazándola
For $i=1 to StringLen($sStr)
$sLetraBuscada=StringMid($sStr,$i,1)
$nPosicionEncontrada=_ArraySearch($aSearch,$sLetraBuscada,0,0,1,1)
ConsoleWrite("La letra " & $i & " es la " & $sLetraBuscada & " Encontrada en la posición: " & $nPosicionEncontrada & @CRLF)
If $nPosicionEncontrada<>-1 Then ; Se ha encontrado
$sStr=StringReplace($sStr,$sLetraBuscada,$aReplace[$nPosicionEncontrada])
EndIf
Next
ConsoleWrite($sStr)
EndFunc
Devuelve: Este texto tiene caracteres con acentos y la funcion los convierte: aaaA Seville, eeee
Como se puede observar, tanto en uno como en otro no funciona bien con todos los caracteres. He probado a cambiar el orden de los caracteres en las matrices otriginales, y a cambiar "Case Sensitive", pero tampoco he llegado a una solución adecuada.
Quizás no se pueda hacer, o quizás sea una tontería, pero ahí lanzo una nueva llamada a la ayuda