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

[SOLUCIONADO]  Detectar Tilde en una cadena
#1

Hola, jovenes

Tengo un array con varias palabras pero se supone que no se si llevan tilde. Alguien me dice como detectar palabras con tilde pero de la forma mas simple que se os ocurra. Si existe alguna función directa o algo así mejor.

Gracias.
    ¡Gracias!
#2

¿Esto te ayuda?
GAMBAS
  1. TextArea1 As TextArea
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   SetUp
  6.   Go
  7.  
  8.  
  9. Public Sub Go()
  10.  
  11.   Dim iLoop, iLetter As Integer
  12.   Dim sText As String[] = Split("En mi programa se repetía LostFocus y cree un programa de pruebas con el mismo código de Message en LostFocus pues siempre se repite LostFocus por que al pasar del TextBox1 y salir Message pues como estaba el puntero ya en TextBox2 pues vuelve a salir Message por que se produce de forma lógica el LostFocus. Y entonces que opinas es quizás un bug o es algo pensado. En fin que opinas. Por otra parte si esto es así, para validar que evento usáis por lo general.", " ")
  13.  
  14.   For iLoop = 0 To sText.Max
  15.     For iLetter = 1 To Len(sText[iLoop])
  16.       If Asc(sText[iloop][iLetter]) > 127 Then TextArea1.Text &= sText[iloop] & gb.NewLine
  17.     Next
  18.   Next
  19.  
  20.  
  21. Public Sub SetUp()
  22.  
  23.   With Me
  24.     .Arrangement = Arrange.Vertical
  25.     .Padding = 5
  26.     .H = 250
  27.     .W = 200
  28.  
  29.   With TextArea1 = New TextArea(Me) As "TextArea1"
  30.     .Expand = True
  31.  


    ¡Gracias!
#3

Gracias cogier Smile

Yo he echo esto para detectar tildes y espacios en blanco. A mi lo que me gustaría saber si ustedes lo pueden simplificar mucho más que yo.

GAMBAS
  1. Dim aCadenas as String[] = ["Fecha de compras", "Descripción", "Año de Investigación", "Fecha creación"]
  2. Dim aConComillasoNo as New String[]
  3.  
  4. 'creo un array con cadenas entre comillas en el caso que tengan espacios ó tildes
  5. For Each sCadena As String In aCadenas
  6. sCadena = IIf(String.InStr(sCadena, " ") > 1 Or String.InStr(sCadena, "á") > 1 Or String.InStr(sCadena, "é") > 1 Or String.InStr(sCadena, "í") > 1 Or String.InStr(sCadena, "ó") > 1 Or String.InStr(sCadena, "ú") > 1, "'" & sCadena & "'", sCadena)
  7.  
  8. aConComillasoNo.Add(sCadena)


    ¡Gracias!
#4

No pude hacer el código más compacto. Tu código no buscaba la "ñ".
    ¡Gracias!
#5

De todos modos propongo este codigo: Confused
GAMBAS
  1. Dim aCadenas As String[] = ["Fecha de compras", "Descripción", "Mediterraneo", "Año de investigación", "Fecha creación"]
  2. Dim aConComillasoNo As New String[]
  3.      
  4. 'creo un array con cadenas entre comillas en el caso que tengan espacios o tildes:
  5. For Each sCadena As String In aCadenas
  6.   c = 0
  7.     Inc c
  8.     b = Asc(sCadena, c)
  9.     If (b == 32) Or (b > 127) Then
  10.       aConComillasoNo.Push("'" & sCadena & "'")
  11.       Break
  12.     Endif
  13.   Until b == 0



"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!
#6

Hola.

Yo he encontrado esta forma, creo que funciona bien, y con la ventaja de poner añadirle más caracteres especiales fácilmente.
Código:
Public Sub Main()

  Dim tildes As String[] = ["á", "é", "í", "ó", "ú"]
  Dim palabra As String = "adiós"

  For a As Integer = 1 To String.Len(palabra)
    If tildes.Exist(String.Mid$(palabra, a, 1)) Then
      Print "Hay tílde"
      Break
    Endif
  Next

End

Un saludo.
    ¡Gracias!
#7

(31-10-2020, 23:26)guizans escribió:  he encontrado esta forma

Sì, pero las suposiciones son diferentes a las de tu primer ejemplo, ya que allí se partía del análisis de palabras.

"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!
#8

(31-10-2020, 21:42)vuott escribió:  De todos modos propongo este codigo: Confused

Mi sincero agradecimiento a todos, yo voy a seguir comiéndome la cabeza, tengo el presentimiento que es posible compactar (en honor a cogier Smile ) mas el código.

guizans, estoy de acuerdo con vuott, vas con ventajas, no vale.

vuott, siento decirte que tu código fallaría en cuanto pase algún ascii basado en un carácter no especificado por mi regla expuesta que es ("á", "é", "í", "ó", "ú", " ") supongo que te habrás dado cuenta ya.

Os pregunto cosas que he pensado pero que ya se que no funciona en Gambas.

Pensé en String.Instr(sCadena, "á" OR "é" OR "í" OR "ó" OR "ú" OR " ") pero aunque funciona sin fallo, el interprete no lo interpreta bien.
Estoy especulando tratar una cadena como un array de caracteres pero creo que Gambas no esta en su lenguaje - Todavía -

Seria genial que lo tuviera. Es incluso lógico que tuviera funciones para tratar cadenas como un array, pero yo soy marinero y esa decición es unicamente del capitan del barco.

Gracias y si a alguien se le ocurre algo pues al ataqueeee.
    ¡Gracias!
#9

(31-10-2020, 23:47)vuott escribió:  
(31-10-2020, 23:26)guizans escribió:  he encontrado esta forma

Sì, pero las suposiciones son diferentes a las de tu primer ejemplo, ya que allí se partía del análisis de palabras.

Vale, es verdad, pero con unos pequeños cambios ahora analiza frases Tongue Tongue
Código:
Public Sub Main()

  Dim tildes As String[] = ["á", "é", "í", "ó", "ú"]
  Dim aCadenas As String[] = ["Fecha de compras", "Descripción", "Año de Investigación", "Fecha creación"]
  Dim tilde As Boolean

  For Each b As String In aCadenas
    For a As Integer = 1 To String.Len(b)
      If tildes.Exist(String.Mid$(b, a, 1)) Then
        tilde = True
        Break
      Endif
    Next
    If tilde Then
      Print b & ": Tiene tilde"
      tilde = False
    Else
      Print b & ": No tiene tilde"
    Endif
  Next

End

Un saludo.

(31-10-2020, 23:47)vuott escribió:  
(31-10-2020, 23:26)guizans escribió:  he encontrado esta forma

Sì, pero las suposiciones son diferentes a las de tu primer ejemplo, ya que allí se partía del análisis de palabras.

Vale, es verdad, pero con unos pequeños cambios ahora analiza frases Tongue Tongue
Código:
Public Sub Main()

  Dim tildes As String[] = ["á", "é", "í", "ó", "ú"]
  Dim aCadenas As String[] = ["Fecha de compras", "Descripción", "Año de Investigación", "Fecha creación"]
  Dim tilde As Boolean

  For Each b As String In aCadenas
    For a As Integer = 1 To String.Len(b)
      If tildes.Exist(String.Mid$(b, a, 1)) Then
        tilde = True
        Break
      Endif
    Next
    If tilde Then
      Print b & ": Tiene tilde"
      tilde = False
    Else
      Print b & ": No tiene tilde"
    Endif
  Next

End
Cita:Estoy especulando tratar una cadena como un array de caracteres pero creo que Gambas no esta en su lenguaje - Todavía -
 
Gambas si que puede tratar los Strings como arrays.
Código:
 
dim palabra as string = "hola" print palabra[1]  

Esto es válido. El problema que encontré es precisamente con los caracteres especiales como las tildes, las eñes, etcétera, que no las imprime. No se el motivo.

Un saludo.
    ¡Gracias!
#10

(01-11-2020, 17:02)guizans escribió:   
Gambas si que puede tratar los Strings como arrays.
Código:
 
dim palabra as string = "hola" print palabra[1]  

Esto es válido. El problema que encontré es precisamente con los caracteres especiales como las tildes, las eñes, etcétera, que no las imprime. No se el motivo.

Un saludo.

Pues sí, tienes razón, algo me dijo vuott pero lo probé otro día y no me fue por algo supongo, y di por concluida la teoría. Acabo de comprobarlo y sí tienes razón. Con respecto a la ñ estoy pensando como resolverlo pero por ahora nada de nada.

Gracias.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por Shell
01-02-2021, 00:20

Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)