Comunidad Gambas-es

Versión completa: Detectar Tilde en una cadena
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
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.
¿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 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)


No pude hacer el código más compacto. Tu código no buscaba la "ñ".
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


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.
(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.
(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.
(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.
(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.
Páginas: 1 2