Autor
|
Tema: Ayuda con Seleccionar Palabra por Palabra (Leído 5,614 veces)
|
RickJack
Desconectado
Mensajes: 6
|
Buenos dias a toda la comunidad, hace un par de dias, que ando envuelto en una duda, lo que pasa es que estoy desarrollando algunos ejemplos, y me tope con la curiosidad de hacer un un formulario que cargue un texto en un richtextbox, y que con cada ves que precione un command1, se vaya seleccionando palabra por palabra, hasta el final. Lo he intentado hacer con el buscador de palabras, pero no consigo nada, ya que talves mis conocimientos son escasos, , pero por lo que pude ver de esos codigos, te buscan una palabra ya predefinida y la sombrean, ahora lo de hacer que con cada click, se me seleccione la palabra siguiente. No se si me pude explicar correctamente, en todo caso agradeceria mucho, si alguien me pudiera decir si voy por buen camino o que es lo que se deba hacer o que deba revisar. O decirme si esto es posible o no?.
|
|
« Última modificación: 15 Septiembre 2008, 20:09 pm por RickJack »
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.165
Un gran poder conlleva una gran responsabilidad
|
Yo lo he conseguido hacer, a lo mejor hay una forma más fácil pero bueno aquí te pongo el método que yo he usado: Option Explicit Dim data As String Dim vdata As Variant Dim cont, i, pos As Integer Private Sub Form_Load() RichTextBox.HideSelection = False 'En false para que no se deseleccione al perder el foco Call contar 'llamada a la función contar End Sub Private Sub Command1_Click() If i < cont Then RichTextBox.SelStart = pos 'Empezamos a seleccionar en la posicion pos RichTextBox.SelLength = Len(vdata(i)) 'SelLength es el tamaño de vdata(i) pos = pos + (Len(vdata(i)) + 1) 'incrementamos selstart +1 para que no seleccione el espacio i = i + 1 'incrementamos i (siguiente palabra) Else i = 0 'Cuando se hayan seleccionado todas las palabras volvemos a la primera pos=0 End If End Sub Function contar() 'Esta función cuenta cuantas palabras tiene el texto Dim i As Integer data = RichTextBox.Text 'data almacena el contenido del texbox vdata = Split(data, " ") 'separamos data por cada espacio que tenga For i = 1 To Len(data) 'desde el primer caracter hasta el último If Mid(data, i, 1) = " " Then ' si el caracter es un espacio sumamos 1 a cont cont = cont + 1 End If Next i cont = cont + 1 ' Al final no hay espacio así que para que seleccione la última palabra sumamos uno al final del proceso End Function
Seguramente se pueda simplificar pero bueno a lo mejor te sirve como idea PD: Si no entiendes alguna parte del código puedes preguntarme y te lo explicaré sin problemas. Saludos!
|
|
« Última modificación: 15 Septiembre 2008, 20:42 pm por Spider-Net »
|
En línea
|
|
|
|
RickJack
Desconectado
Mensajes: 6
|
Muchas gracias por la ayuda, fue muy generoso de tu parte exporer parte de la solucion, era presiamente la idea, esto me ayudara de mucho, le estoy adicionando una barra de procesos, de tal forma que cuando haga cada click, la barra vaya creciendo conforme recorre cada letra.
Lo que si quisiera saber es algo, el metodo para seleccionar una palabra puede ser aplicado a cualquier control que pueda contener un texto, es decir a un label, text, etc.
Tu solucion para el conteo de palabras es bastante practica ya que habia encontrado este otro metodo, no se si sea el mismo, pero aca va.
================================================ Function ContarPalabras(ByVal Texto As String) As Long Dim EnPalabra As Boolean, NumPalabras As Long, i As Long, j As Long Dim Letra As String * 1 'si me falta alguno no hay más que añadirlo a la constante Const Separadores As String = " ºª\!|""@·#$%&¬/()=?'¡¿^`[]*+¨´{}<>,;.:-_" & vbCrLf
'eliminar los espacios por delante y por detrás, aunque en realidad no le '"molestan" a la función Texto = Trim(Texto) For i = 1 To Len(Texto) Letra = Mid(Texto, i, 1) 'si es una letra y no estaba recorriendo una palabra es que es una nueva palabra If InStr(Separadores, Letra) = 0 Then If Not EnPalabra Then EnPalabra = True NumPalabras = NumPalabras + 1 End If Else EnPalabra = False End If Next i ContarPalabras = NumPalabras End Function =====================================================
lo que se me hacia un mundo era como hacer el corrido de letras.
en cuanto incorpore la barra de procesos, lo pondre.
Nuevamente Gracias.
|
|
« Última modificación: 15 Septiembre 2008, 21:57 pm por RickJack »
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.165
Un gran poder conlleva una gran responsabilidad
|
El método que tú pones para contar palabras y el que yo he usado en realidad son parecidos, yo para recorrer todo el texto lo único que hago es un For. For i=1 To Len(RichTextBox.Text) 'Len(RichTextBox.Text) devuelve el número de caracteres que contiene el RichTextBox If Mid(RichTextbox.Text, i, 1) = " " Then cont = cont + 1 End If Next i
Es sencillo porque con la función Len saco el número de caracteres total del TextBox, luego digo que lo recorra desde el caracter 1 hasta el número total de caracteres. Luego la función Mid funciona así: Mid(RichTexBox.Text, i, 1) Es algo así: coge el caracter de la posición i de RichTexBox.Text tomado de 1 en 1. Así recorres cada caracter y compruebas si el caracter es un espacio, como el espacio siempre separa las palabras, cada espacio que encuentras sumas 1 ya que es una palabra más. Y como tras la última palabra no hay espacio pues al final del proceso le sumo uno más. Lo de vdata(i) es en realidad un array separado por la función, Split un ejemplo sería: Dim data as String Dim vdata as Variant data="hola|adios|bien|mal" vdata=Split(data, "|") La función Split lo que hace es dividir a partir del caracter o caracteres que pongas en la función, es algo así como: Separa lo que hay en data a partir del caracter "|" Entonces esto daría: vdata(0) = "hola" vdata(1) = "adios" vdata(2) = "bien" vdata(3) = "mal" Pues yo he hecho lo mismo pero usando como separador los espacios. Así obtuve cada palabra separada. Y a la pregunta de si se puede usar este método para otros controles, la respuesta es sí. En labels, en textox, en listbox, en listviews... etc. Espero haberte aclarado un poco, si no entiendes algo, sólo tienes que preguntarlo. Saludos!
|
|
« Última modificación: 15 Septiembre 2008, 22:11 pm por Spider-Net »
|
En línea
|
|
|
|
RickJack
Desconectado
Mensajes: 6
|
Como dije, la solucion es bastante practica a diferencia de lo que tenia, gracias por la ayuda, no sabia en realidad cual era el mecanisno de la funcion. Bueno, esta seria la solucion para la barra de procesos, al parecer con esto estaria por concluida esta interrogante, muchas gracias amigo Spider-Net. Esto para el incremento de la barra de procesos. 'Le establecemos un valor para el máximo ProgressBar1.Max = cont For t = 0 To i ' Valor actual del Progressbar ProgressBar1.Value = t ' Visualizamos el porcentaje en el Label Label2 = CLng((ProgressBar1.Value * 100) / ProgressBar1.Max) & " %" DoEvents Next
Bueno nuevamente Gracias por todo.
|
|
« Última modificación: 15 Septiembre 2008, 22:48 pm por RickJack »
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.165
Un gran poder conlleva una gran responsabilidad
|
Me alegro que te haya servido de ayuda y hayas aprendido algo nuevo. Ahora a seguir aprendiendo y programando. Y cuando tengas alguna duda ya sabes donde estamos. Mira como hice yo lo de la barra de progreso, a ver que te parece, es un poco mas corto: Option Explicit Dim data As String Dim vdata As Variant Dim cont, i, pos As Integer Private Sub Form_Load() RichTextBox.HideSelection = False 'En false para que no se deseleccione al perder el foco Call contar 'llamada a la función contar End Sub Private Sub Command1_Click() ProgressBar1.Max = Len(data) If pos < ProgressBar1.Max Then ProgressBar1.Value = pos Else ProgressBar1.Value = ProgressBar1.Max End If If i < cont Then RichTextBox.SelStart = pos 'Empezamos a seleccionar en la posicion pos RichTextBox.SelLength = Len(vdata(i)) 'SelLength es el tamaño de vdata(i) pos = pos + (Len(vdata(i)) + 1) 'incrementamos selstart +1 para que no seleccione el espacio i = i + 1 'incrementamos i (siguiente palabra) Else i = 0 'Cuando se hayan seleccionado todas las palabras volvemos a la primera pos = 0 End If End Sub Function contar() 'Esta función cuenta cuantas palabras tiene el texto Dim i As Integer data = RichTextBox.Text 'data almacena el contenido del texbox vdata = Split(data, " ") 'separamos data por cada espacio que tenga For i = 1 To Len(data) 'desde el primer caracter hasta el último If Mid(data, i, 1) = " " Then ' si el caracter es un espacio sumamos 1 a cont cont = cont + 1 End If Next i cont = cont + 1 ' Al final no hay espacio así que para que seleccione la última palabra sumamos uno al final del proceso End Function
Solo he añadido esto: ProgressBar1.Max = Len(data) 'El valor máximo es el total de caracteres If pos < ProgressBar1.Max Then ProgressBar1.Value = pos 'El valor es igual al número de caracter por el que va Else ProgressBar1.Value = ProgressBar1.Max 'Si se pasa del límite ProgressBar1.Value es igual al máximo y ya está End If
Lo que pasa es que mi método hace que la ProgressBar progrese un poco más de golpe que la tuya, pero bueno, igual funciona. Saludos!
|
|
« Última modificación: 15 Septiembre 2008, 23:12 pm por Spider-Net »
|
En línea
|
|
|
|
RickJack
Desconectado
Mensajes: 6
|
Tienes razon, es algo rapido, pero no deja de ser una alternativa a tomar en cuenta, creo que reduciendo algo mas quedaria asi: ProgressBar1.Max = cont For t = 0 To i : ProgressBar1.Value = t: Next
Bueno amigo muchas gracias. Eso si amigo, todo esto me ha inspirado mucho, voy a seguir tus consejos, ya empece a buscar esos apuntes que me mencionaste. "Se que no podre aprender todo en esta vida pero me esforzare por aprender lo mas que se pueda y asi poder crear un nuevo conocimiento". RickJack
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
contar caracteres de una palabra y devolver que palabra es en java
Java
|
Cooltan
|
4
|
23,814
|
6 Abril 2011, 12:21 pm
por Cooltan
|
|
|
Seleccionar aleatoriamente una palabra de un array en C
Programación C/C++
|
folostia
|
1
|
6,872
|
21 Diciembre 2011, 17:19 pm
por Eternal Idol
|
|
|
Duda sobre seleccionar palabra por palabra en RichTextBox (vb.net)
.NET (C#, VB.NET, ASP)
|
Susoch
|
3
|
7,184
|
19 Enero 2012, 18:15 pm
por Susoch
|
|
|
insertar palabra por palabra a una matriz
Programación C/C++
|
Fabi0lo
|
3
|
3,630
|
20 Octubre 2012, 18:17 pm
por rir3760
|
|
|
Ayuda con un arreglo para saber si se puede porfar una palabra en C¡¡¡¡¡
Programación C/C++
|
Chachorro 2009
|
1
|
1,929
|
4 Mayo 2016, 03:33 am
por Eternal Idol
|
|