Separar palabras de una frase

Iniciado por abreu20011, 21 Noviembre 2011, 05:14 AM

0 Miembros y 1 Visitante están viendo este tema.

abreu20011

Saludos :)

Llevo un tiempo con este código que no logro que funcione "del todo"
Estoy buscando una forma en la que al escribir una frase, se separan las palabras una por una, aunque mi código ahora mismo sólo funciona con la primera palabra o la ultima de una frase u.u

Este es el código para sacar la primera palabra, que aunque no funciona como yo quisiera, funciona:

Public Function FirstWord(Byval frase As String) As String
Dim word As String = ""

For i As Integer = 1 To Len(frase)
'Analizamos desde la posición 1 hasta el maximo de la frase por un For buscando el espacio en blanco
'para saber que se comienza a escribir una segunda palabra, y por tanto, sabemos cual es la primera
If Mid(frase,i,1) = " " Then
word = Mid(frase, 1, (i - 1))
Return word
Exit for
End If
Next
If word = "" Then
'Si la variable "word" no tiene nada guardado (esto se debe a que solo hay una palabra en la frase)
'procedemos a guardar en word la frase entera
Return frase
End If
End Function


Y la función para la ultima palabra (que deberia ser la segunda, no la ultima u.u)
Básicamente hago lo mismo que en la primera para sacar la primera palabra, y a a partir de ahí, la "quito" para que lo vuelva analizar ya sin esa primera palabra:

Public Function SecondWord(ByVal frase As String) As String
Dim word As String = ""
Dim startSecondWord As Integer = 0

For i As Integer = 1 To Len(frase)
If Mid(frase, i, 1) = " " Then
startSecondWord = i + 1 'añadimos el +1 para que se salte el espacio y comienze por la 2º palabra directamente
frase = Mid(frase,startSecondWord) 'Guardamos la frase ya con la primera palabra quitada
End If
Next

For x As Integer = 1 To Len(frase)
If Mid(frase, x, 1) = " " Then
word = Mid(frase,1, (x - 1))
Return word
Exit For
End If
Next
If word = "" Then
'Si la variable wrod esta vacia, igual que en FirstWord devolvemos la frase entera, que ya ha sido cortada la primera
'palabra el primer For de esta función
return frase
End If
End Function


No se si es posible saber si un cadena llega a su fin, así no necesitaría buscar ese espacio, que es el mismo que me cusa el problema de que si solo hay una palabra en toda la frase, necesite del ultimo If Then para sacarla >.<

Si alguien me pudiera dar algún consejo se lo agradecería :)

Un saludo

abreu20011

#1
Como sabia que iba a postear y encontrar la solución xD

Por si alguien tiene una duda similar, el framework pone a nuestra disposición una función que me acaba de enamorar: Split(http://msdn.microsoft.com/es-es/library/6x627e5f(v=vs.80).aspx)

Dim frase As String = "Split mola mucho"

Dim comando() As String = Split(frase)

Console.WriteLine("La primera palabra es: " & comando(0))
Console.WriteLine("La segunda palabra es: " & comando(1))
Console.WriteLine("La tercera palabra es: " & comando(2))


Esto no devuelve:

La primera palabra es: Split
La segunda palabra es: mola
La tercera palabra es: mucho

Un saludo a todos :)