Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Quitar acentos de una cadena
#1

Hola amigos.
¿Alguien sabe como quitar los acentos de una cadena?
Yo intente con esto y no funciona:

GAMBAS
  1. '{Funcion quita los acentos de las vocales}
  2. Public Function SinAcento(Cadena As String) As String
  3.     Dim tm As Integer
  4.     Dim l As Single
  5.     Dim z As String
  6.     Dim final As String
  7.     
  8.     tm = Len(cadena)
  9.     For l = 1 To tm
  10.         z = Mid(cadena, l, 1)
  11.  
  12.         Select Case z
  13.             Case z = "á"
  14.                z = "a"
  15.             Case z = "é"
  16.                z = "e"
  17.             Case z = "í"
  18.                z = "i"
  19.             Case z = "ó"
  20.                z = "o"
  21.             Case z = "u"
  22.                z = "ú"
  23.         End Select
  24.     
  25.         final = final & z
  26.     Next
  27.     
  28.     Return Trim(final)



Saludos.
    ¡Gracias!
#2

Enlaza al proyecto el módulo gbutils, que expande la clase string y ahí tienes el método removediacritics que hace exactamente eso.


Saludos

No podemos regresar
    ¡Gracias!
#3

...yo propondria este codigo:
GAMBAS
  1. Public Sub Main()
  2.  
  3.   Dim cadena As String = "áéíóú"
  4.   Dim l As Short
  5.   
  6.   For l = 1 To Len(cadena)
  7.     Select Case String.Mid(cadena, l, 1)
  8.       Case "á"
  9.         cadena = Replace(cadena, "á", "a")
  10.       Case "é"
  11.         cadena = Replace(cadena, "é", "e")
  12.       Case "í"
  13.         cadena = Replace(cadena, "í", "i")
  14.       Case "ó"
  15.         cadena = Replace(cadena, "ó", "o")
  16.       Case "ú"
  17.         cadena = Replace(cadena, "ú", "u")
  18.     End Select
  19.   Next
  20.   
  21.   Print cadena
  22.   



"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#4

Hola. muchas gracias. Smile

La solución de VUOTT funciona muy bien.

Pero si habilito gb.utilit me genera un error -VIOLACION DE SEGMENTO-
esto es en Linux Mint 19.3 32bits con Cinnamon y GB3.16.1, Cpu Core-i5
8Gb de RAM.

Huh
    ¡Gracias!
#5

Prueba este código. Ataca el problema desde una dirección diferente.

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Dim sString As String = "Lo miraré en la máquina virtual áéíóúñüÁÉÍÓÚÑÜ aeiounu AEIOUNU"
  4.  
  5.   Print sString
  6.   Print SinAcento(sString)
  7.  
  8.  
  9. Public Sub SinAcento(Cadena As String) As String
  10.  
  11.   Dim iOld As Integer[] = [225, 233, 237, 243, 250, 241, 252, 193, 201, 205, 211, 218, 209, 220]
  12.   Dim iNew As Integer[] = [97, 101, 105, 111, 117, 110, 117, 65, 69, 73, 79, 85, 78, 85]
  13.   Dim iLoop, iBuild As Integer
  14.   Dim sNew As String
  15.  
  16.   For iLoop = 1 To String.Len(Cadena)
  17.     iBuild = String.Code(Cadena, iLoop)
  18.     If iOld.Find(iBuild) > -1 Then sNew &= String.Chr(iNew[iOld.Find(iBuild)]) Else sNew &= String.Chr(iBuild)
  19.   Next
  20.  
  21.   Return sNew
  22.  



Lo miraré en la máquina virtual áéíóúñüÁÉÍÓÚÑÜ aeiounu AEIOUNU
Lo mirare en la maquina virtual aeiounuAEIOUNU aeiounu AEIOUNU
[-] Los siguientes 1 usuarios dice gracias a cogier por este post:
  • guizans
    ¡Gracias!
#6

(21-12-2021, 01:52)alessandri escribió:  Pero si habilito gb.utilit me genera un error -VIOLACION DE SEGMENTO-
esto es en Linux Mint 19.3 32bits con Cinnamon y GB3.16.1, Cpu Core-i5
8Gb de RAM.
  • El componente se llama gb.util no gb.utilit
  • Si tienes un CPU intel i5 ¿Por que usas con una versión de 32bits de LM?
Nota: Puedes copiarte la función para quitar acentos desde el código fuente de gambas.
https://gitlab.com/gambas/gambas/-/raw/m...ring.class

1 Saludo.
    ¡Gracias!
#7

¿Para que sirven llaves que hay en el parámetro que recibe el método?
 
Código:
Static Public Sub RemoveDiacritics({String} As String) As String

  If Not {String} Then Return
  If IsAscii({String}) Then Return {String}

  Return DoRemoveAccents({String})
  
End
 ¿O es simplemente un nombre de variables como otro cualquiera?
    ¡Gracias!
#8

(22-12-2021, 22:39)guizans escribió:  Para que sirven llaves que hay en el parámetro que recibe el método?
...es simplemente un nombre de variables.
En general, no es posible utilizar una palabra-llave para identificar una variable, a menos que se coloque entre dos corchetes gráficos.

https://gambaswiki.org/wiki/lang/resident

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
[-] Los siguientes 1 usuarios dice gracias a vuott por este post:
  • tincho
    ¡Gracias!
#9

Que bueno, Vuott, no lo sabía.

Gracias.
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)