Páginas (2): 1 2   
gambafeliz   30-10-2020, 20:52
#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.
Última modificación: 03-11-2020, 15:24 por gambafeliz.
cogier   31-10-2020, 14:20
#2
¿Esto te ayuda?
Código:
TextArea1 As TextArea

Public Sub Form_Open()

  SetUp
  Go

End

Public Sub Go()

  Dim iLoop, iLetter As Integer
  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.", " ")

  For iLoop = 0 To sText.Max
    For iLetter = 1 To Len(sText[iLoop])
      If Asc(sText[iloop][iLetter]) > 127 Then TextArea1.Text &= sText[iloop] & gb.NewLine
    Next
  Next

End

Public Sub SetUp()

  With Me
    .Arrangement = Arrange.Vertical
    .Padding = 5
    .H = 250
    .W = 200
  End With

  With TextArea1 = New TextArea(Me) As "TextArea1"
    .Expand = True
  End With

End
gambafeliz   31-10-2020, 17:54
#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.

Código:
Dim aCadenas as String[] = ["Fecha de compras", "Descripción", "Año de Investigación", "Fecha creación"]
   Dim aConComillasoNo as New String[]

   'creo un array con cadenas entre comillas en el caso que tengan espacios ó tildes
   For Each sCadena As String In aCadenas
      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)

      aConComillasoNo.Add(sCadena)
   Next
Última modificación: 31-10-2020, 17:58 por gambafeliz.
cogier   31-10-2020, 18:31
#4
No pude hacer el código más compacto. Tu código no buscaba la "ñ".
vuott   31-10-2020, 21:42
#5
De todos modos propongo este codigo: Confused
Código:
Dim aConComillasoNo As New String[]
Dim b As Byte
Dim c As Short
     
'creo un array con cadenas entre comillas en el caso que tengan espacios o tildes:
For Each sCadena As String In aCadenas
  c = 0
  Repeat
    Inc c
    b = Asc(sCadena, c)
    If (b == 32) Or (b > 127) Then
      aConComillasoNo.Push("'" & sCadena & "'")
      Break
    Endif
  Until b == 0
Next
Última modificación: 31-10-2020, 21:46 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   31-10-2020, 23:26
#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.
vuott   31-10-2020, 23:47
#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, 1983)

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

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
gambafeliz   01-11-2020, 15:44
#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.
Última modificación: 02-11-2020, 10:49 por gambafeliz.
guizans   01-11-2020, 17:02
#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.
Última modificación: 01-11-2020, 17:06 por guizans.
gambafeliz   01-11-2020, 18:22
#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.
Última modificación: 01-11-2020, 18:24 por gambafeliz.
Páginas (2): 1 2   
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.