https://foro.gambas-es.org/viewtopic.php?f=1&t=7953
-----------------------------------
Shell
Martes, 07 Abril 2020, 21:39

Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
Buenas!.

¿ No existe un método algo más rápido ?.  :roll: 

Tengo una lista de nombres y quiero solo seleccionar solo los que tienen tilde.
Creo que es la forma correcta de hacerlo con Instr.

[code linenumbers=false syntax=gambas]
Public Function EncontrarTildes(nombre As String) As Boolean
  
  Dim x As Integer
  Dim vocales As String = "áéíóúÁÉÍÓÚ"
  Dim encontrada As Boolean
      
  x = 1
  
  While (encontrada = False And (x <= String.Len(vocales)))   
    If String.InStr(nombre, String.Mid(vocales, x, 1)) > 0 Then encontrada = True    
    Inc x    
  Wend     
  
  Return encontrada
  
End
[/code]

 [img]https://foro.gambas-es.org/files/images/768/nombrescontildes.png[/img] 

Como sabéis es posible usar un bucle for y salir de este cuando haya coincidencia pero
he leído que ciertos programadores no ven bien el uso instrucciones como "break" 
para salir del bucle, por eso usé una variable boolean con un While.

Saludos


-----------------------------------
tincho
Martes, 07 Abril 2020, 23:33

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
Si, existe una forma mas sencilla de hacerlo
[code linenumbers=false syntax=gambas]
Public Function AShellLoContaminoJava(s As String) As Boolean
  If s = String.RemoveDiacritics(s) Then
    Return False
    Else
      Return True
  Endif
End
[/code]
Saludos. :mryellow:


-----------------------------------
Shell
Jueves, 09 Abril 2020, 11:32

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
Tincho:

[quote]
AShellLoContaminoJava
[/quote]

 :lol:

Esos métodos no son fáciles de encontrar a la primera en la ayuda de Gambas.  :o 
Falta de costumbre de no usar gb.util.  Y sigo sin usarlo muchas veces.

Gracias!.

Saludos


-----------------------------------
vuott
Jueves, 09 Abril 2020, 17:50

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
Como las letras [i]localizadas[/i] son caracteres ASCII especiales, en los que está presente el valor hexadecimal &hC3, buscaremos este valor dentro de cada palabra.

Es decir...
[code linenumbers=false syntax=gambas]Private Function EncontrarTildes(nombre As String) As Boolean

   Return Byte[].FromString(nombre).Exist(&C3)
  
End[/code]


-----------------------------------
Shell
Jueves, 09 Abril 2020, 19:30

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
Hola Vuott!.

Si se quiere reducir el código cada vez es más difícil de entender.  :roll: 

Un poco extraño el ascii extendido, dos códigos cuando se usa una letra con "tilde".

¿ No es una letra "A" con diéresis el código C3 ?

Si le paso a la función "ó" me devuelve los códigos 195 ( C3 )  y 179...desde luego el 179 no es precisamente una "o".... :roll: 

La solución más corta. Tu dominas muy bien Byte[]... :twisted: 

Gracias!.

Saludos


-----------------------------------
vuott
Jueves, 09 Abril 2020, 21:46

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
[quote user="Shell" post="47856"]Si se quiere reducir el código cada vez es más difícil de entender. [/quote]

Bueno...

[code linenumbers=false syntax=gambas]Private Function EncontrarTildes(nombre As String) As Boolean

  dim bb as Byte[]

  bb = Byte[].FromString(nombre)

  return bb.Exist(&C3)

End[/code]


-----------------------------------
vuott
Jueves, 09 Abril 2020, 21:53

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
[quote user="Shell" post="47856"]Tu dominas muy bien Byte[]... :twisted: [/quote]

Consul, ...[i]in manu habeo vectores ![/i]

[quick]https://anticafrontierabb.files.wordpress.com/2012/08/augusto.jpg[/quick]


-----------------------------------
Shell
Viernes, 10 Abril 2020, 14:40

Re: Seleccionar Solo Los Nombres Que Contienen Una Tilde
-----------------------------------
Vuott:

Entiendo bien tu código. Lo que pasa es que no tengo costumbre de usar Byte[] y no se me hubiera ocurrido hacerlo así.
Ya me has demostrado otra veces lo útil que es, pero como no lo uso, no se me ocurre a la primera.  :roll: 

[quote]
Consul, ...in manu habeo vectores !
[/quote]

Una cuestión. ¿ Cómo sabías que correspondía a la tilde ?. ¿  Estuviste viendo el código que se repetía ?.  jeje.. :twisted: 
Mira esto:

https://elcodigoascii.com.ar/


Encontré:

[quote]
codigo ascii 195 = ├ ( Línea vertical con empalme de recuadro gráfico )
[/quote]

Esto es distinto.

¿ Hay otros códigos ascii extendido que hacen funciones parecidas ?.

Saludos


