Comunidad Gambas-es
Quitar acentos de una cadena - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: Quitar acentos de una cadena (/thread-782.html)



Quitar acentos de una cadena - alessandri - 20-12-2021

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

Código:
'{Funcion quita los acentos de las vocales}
Public Function SinAcento(Cadena As String) As String
    Dim tm As Integer
    Dim l As Single
    Dim z As String
    Dim final As String
    
    tm = Len(cadena)
    For l = 1 To tm
        z = Mid(cadena, l, 1)

        Select Case z
            Case z = "á"
               z = "a"
            Case z = "é"
               z = "e"
            Case z = "í"
               z = "i"
            Case z = "ó"
               z = "o"
            Case z = "u"
               z = "ú"
        End Select
    
        final = final & z
    Next
    
    Return Trim(final)
End

Saludos.


RE: Quitar acentos de una cadena - Shordi - 20-12-2021

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


Saludos


RE: Quitar acentos de una cadena - vuott - 21-12-2021

...yo propondria este codigo:
Código:
Public Sub Main()

  Dim cadena As String = "áéíóú"
  Dim l As Short
  
  For l = 1 To Len(cadena)
    Select Case String.Mid(cadena, l, 1)
      Case "á"
        cadena = Replace(cadena, "á", "a")
      Case "é"
        cadena = Replace(cadena, "é", "e")
      Case "í"
        cadena = Replace(cadena, "í", "i")
      Case "ó"
        cadena = Replace(cadena, "ó", "o")
      Case "ú"
        cadena = Replace(cadena, "ú", "u")
    End Select
  Next
  
  Print cadena
  
End



RE: Quitar acentos de una cadena - alessandri - 21-12-2021

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


RE: Quitar acentos de una cadena - cogier - 21-12-2021

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

Código:
Public Sub Form_Open()

  Dim sString As String = "Lo miraré en la máquina virtual áéíóúñüÁÉÍÓÚÑÜ aeiounu AEIOUNU"

  Print sString
  Print SinAcento(sString)

End

Public Sub SinAcento(Cadena As String) As String

  Dim iOld As Integer[] = [225, 233, 237, 243, 250, 241, 252, 193, 201, 205, 211, 218, 209, 220]
  Dim iNew As Integer[] = [97, 101, 105, 111, 117, 110, 117, 65, 69, 73, 79, 85, 78, 85]
  Dim iLoop, iBuild As Integer
  Dim sNew As String

  For iLoop = 1 To String.Len(Cadena)
    iBuild = String.Code(Cadena, iLoop)
    If iOld.Find(iBuild) > -1 Then sNew &= String.Chr(iNew[iOld.Find(iBuild)]) Else sNew &= String.Chr(iBuild)
  Next

  Return sNew

End

Lo miraré en la máquina virtual áéíóúñüÁÉÍÓÚÑÜ aeiounu AEIOUNU
Lo mirare en la maquina virtual aeiounuAEIOUNU aeiounu AEIOUNU


RE: Quitar acentos de una cadena - tincho - 22-12-2021

(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/master/comp/src/gb.util/.src/String.class


RE: Quitar acentos de una cadena - guizans - 22-12-2021

¿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?


RE: Quitar acentos de una cadena - vuott - 22-12-2021

(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


RE: Quitar acentos de una cadena - guizans - 23-12-2021

Que bueno, Vuott, no lo sabía.

Gracias.