alessandri   20-12-2021, 21:48
#1
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.
Shordi   20-12-2021, 22:04
#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
vuott   21-12-2021, 01:09
#3
...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
Última modificación: 21-12-2021, 01:10 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
alessandri   21-12-2021, 01:52
#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
Última modificación: 21-12-2021, 02:13 por alessandri.
cogier   21-12-2021, 18:34
#5
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
tincho   22-12-2021, 12:04
#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.
guizans   22-12-2021, 22:39
#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?
Última modificación: 22-12-2021, 22:42 por guizans.
vuott   22-12-2021, 23:54
#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
Última modificación: 22-12-2021, 23:56 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
guizans   23-12-2021, 22:48
#9
Que bueno, Vuott, no lo sabía.

Gracias.
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.