Private vocales As String[] = ["a", "e", "i", "o", "u", "á", "é", "í", "ó", "ú"]
Private consonantes As String[] = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "ñ", "p", "q", "r", "s", "t", "v", "w", "y", "z"]
Public Sub Main()
'Condición 1. Consonante al comienzo de la palabra
'No se comtempla aún que exista al final de la palabra una consonante
'Descomponer("casa")
'Descomponer("colibrí")
Descomponer("frigorífico")
'Aquí fallaría
'Descomponer("neveras")
End
Public Sub Descomponer(palabra As String)
Dim lugar As Integer
Dim subcadena As String
While String.Len(palabra) > 1
subcadena = ConsonanteAlPrincipio(palabra)
Print subcadena
'Para obtener el lugar hasta donde llega la subcadena:
'Encuentro el comienzo de la subcadena dentro de la cadena palabra y le añado el tamaño de la longitud de la subcadena menos una posición
'No existe una posición cero, las cadenas comienzan desde 1
lugar = String.RInStr(palabra, subcadena) + String.Len(subcadena) - 1
'Eliminamos de la palabra, la subcadena que se encuentra en el lugar más una posición
'Creando una palabra nueva, lo que queda de la palabra original
palabra = String.Mid(palabra, lugar + 1)
Wend
End
Public Function ConsonanteAlPrincipio(cadena As String) As String
Dim palabra As String
Dim x As Integer
Dim encuentraconsonante As Boolean
Dim encuentravocal As Boolean
palabra = ""
x = 1
While Not encuentraconsonante Or Not encuentravocal And x <= String.Len(cadena)
'Primero encontrar la consonante
If consonantes.Find(String.Mid(cadena, x, 1)) <> -1 Then
encuentraconsonante = True
palabra &= String.Mid(cadena, x, 1)
Endif
'Si encontramos la consonante, podemos buscar la vocal
If encuentraconsonante Then
If vocales.Find(String.Mid(cadena, x, 1)) <> -1 Then
encuentravocal = True
palabra &= String.Mid(cadena, x, 1)
Endif
Endif
Inc x
Wend
Return palabra
End
Public Function ConsonanteAlPrincipio(cadena As String) As String
Dim palabra As String
Dim x As Integer
Dim encuentraconsonante As Boolean
Dim encuentravocal As Boolean
Dim incremento As Integer
palabra = ""
x = 1
incremento = 1
While Not encuentraconsonante Or Not encuentravocal And x <= String.Len(cadena)
'Primero encontrar la consonante
If consonantes.Find(String.Mid(cadena, x, 1)) <> -1 Then
encuentraconsonante = True
palabra &= String.Mid(cadena, x, 1)
Endif
'Si encontramos la consonante, podemos buscar la vocal
If encuentraconsonante Then
If vocales.Find(String.Mid(cadena, x, 1)) <> -1 Then
encuentravocal = True
palabra &= String.Mid(cadena, x, 1)
'Comprobar si sumando una posición llegamos al tamaño de la cadena
If x + 1 = String.Len(cadena) Then
'Se tiene que añadir la consonante que queda en la última posición de la cadena
palabra &= String.Mid(cadena, x + 1, 1)
'Cambiamos el valor del incremento en 2
incremento = 2
Endif
Endif
Endif
x += incremento
Wend
Return palabra
End
Public Function silabaTonica(palabra As String) As String ''Retorna la sílaba tónica de una palabra
Dim sil As New String[]
Dim toni As Integer
sil = silabeame(palabra)
toni = miTonica(sil)
'Return sil[sil.Count + toni]
Return sil[sil.Max + toni]
End
Private Function contiene2(lis As String[], pala As String) As Boolean
'Dim devolver As Boolean = False
Dim letras As New String[]
For a As Integer = 1 To String.Len(pala)
letras.Add(String.Mid(pala, a, 1))
Next
For Each j As String In letras
If lis.Exist(j) Then
'Siempre va a devolver True
'devolver = True
Return True
Endif
Next
'Siempre va a devolver False
'Return devolver
Return False
End
' **** Estadísiticas de un texto.
' <<<< Devuelve una matriz de enteros:
' [0]: Número de palabras
' [1]: Número de tipos
' [2]: Número de caracteres
' [3]: Perspicuidad de Szgrizt 1993
' >>>> Texto plano para obtener estadísticas.
'
'' ╔═════════════════════════════════════════════════════════════╗
'' ║ Atención: PCRE sólo admite texto ASCII extendido, no UTF-8. ║
'' ║ Los valores obtenidos son aproximados. ║
'' ╚═════════════════════════════════════════════════════════════╝
Dim iPaso As New Integer[4] ' Variable de paso para almacenar resultados
Dim sEse As String ' Cadena de trabajo
Dim iPal As Integer ' Nº Palabras para cálculo perspicuidad
Dim iSil As Integer ' Nº Sílabas " "
Dim iLet As Integer ' Nº Letras " "
Dim iFrs As Integer ' Nº Frases " "
Dim SCAM As String = Chr(7) ' El símbolo «campanita» que ya no se usa
' Si no hay texto, no hay resultados
If Not Texto Then Return [0, 0, 0, 0]
' Palabras
sEse = RegExp.Replace(Texto, "([A-Za-zÁÉÍÓÚáéíóúÜüñÑ0-9])[A-Za-zÁÉÍÓÚáéíóúÜüñÑ0-9]*", SCAM, RegExp.Greedy)
iPal = Split(sEse, SCAM).Max
iPaso[0] = iPal
' Tipos
sEse = RegExp.Replace(Texto, ".", SCAM, RegExp.Greedy)
iPaso[1] = Split(sEse, SCAM).Max
' Caracteres
sEse = RegExp.Replace(Texto, "\\S", SCAM, RegExp.Greedy)
iPaso[2] = Split(sEse, SCAM).Max
' Sílabas
sEse = RegExp.Replace(Texto, "[aeo]h[iu]|[iu]h[aeo]|[aeo][iu]|[aeo][y]|[y]|[íú]|[iu][^aeo]|[aeo]|[áéíóú]|[q|g]ui[aeo]", SCAM, RegExp.Greedy + RegExp.Caseless)
iSil = Split(sEse, SCAM).Max
' Letras
sEse = RegExp.Replace(Texto, "[A-Za-zÁÉÍÓÚáéíóúÜüñÑ0-9]", SCAM, RegExp.Greedy)
iLet = Split(sEse, SCAM).Max
' Frases
sEse = RegExp.Replace(Texto, "[.?!][^.?!]", SCAM, RegExp.Greedy)
iFrs = Split(sEse, SCAM).Max
' Perspicuidad
If iPal > 0 And iFrs > 0 Then
iPaso[3] = 206.835 - 62.3 * iSil / iPal - iPal / iFrs
Else
iPaso[3] = 0
Endif
Return iPaso
End