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 cogier
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
No pude hacer el código más compacto. Tu código no buscaba la "ñ".
De todos modos propongo este codigo:
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
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: 
Mi sincero agradecimiento a todos, yo voy a seguir comiéndome la cabeza, tengo el presentimiento que es posible compactar (en honor a cogier

) 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
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
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.