elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Ayuda con Seleccionar Palabra por Palabra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Seleccionar Palabra por Palabra  (Leído 5,359 veces)
RickJack

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda con Seleccionar Palabra por Palabra
« en: 15 Septiembre 2008, 19:36 pm »

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 Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Ayuda con Seleccionar Palabra por Palabra
« Respuesta #1 en: 15 Septiembre 2008, 20:35 pm »

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:

Código
  1. Option Explicit
  2. Dim data As String
  3. Dim vdata As Variant
  4. Dim cont, i, pos As Integer
  5.  
  6. Private Sub Form_Load()
  7. RichTextBox.HideSelection = False 'En false para que no se deseleccione al perder el foco
  8. Call contar 'llamada a la función contar
  9. End Sub
  10.  
  11. Private Sub Command1_Click()
  12. If i < cont Then
  13.    RichTextBox.SelStart = pos 'Empezamos a seleccionar en la posicion pos
  14.    RichTextBox.SelLength = Len(vdata(i))  'SelLength es el tamaño de vdata(i)
  15.    pos = pos + (Len(vdata(i)) + 1)  'incrementamos selstart +1 para que no seleccione el espacio
  16.    i = i + 1  'incrementamos i (siguiente palabra)
  17. Else
  18.    i = 0 'Cuando se hayan seleccionado todas las palabras volvemos a la primera
  19.    pos=0
  20. End If
  21. End Sub
  22.  
  23. Function contar() 'Esta función cuenta cuantas palabras tiene el texto
  24. Dim i As Integer
  25. data = RichTextBox.Text  'data almacena el contenido del texbox
  26. vdata = Split(data, " ")   'separamos data por cada espacio que tenga
  27.  
  28. For i = 1 To Len(data)      'desde el primer caracter hasta el último
  29.    If Mid(data, i, 1) = " " Then   ' si el caracter es un espacio sumamos 1 a cont
  30.        cont = cont + 1
  31.    End If
  32. Next i
  33. cont = cont + 1    ' Al final no hay espacio así que para que seleccione la última palabra sumamos uno al final del proceso
  34. 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 Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con Seleccionar Palabra por Palabra
« Respuesta #2 en: 15 Septiembre 2008, 21:53 pm »

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 Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Ayuda con Seleccionar Palabra por Palabra
« Respuesta #3 en: 15 Septiembre 2008, 22:09 pm »

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.

Código
  1. For i=1 To Len(RichTextBox.Text) 'Len(RichTextBox.Text) devuelve el número de caracteres que contiene el RichTextBox
  2.       If Mid(RichTextbox.Text, i, 1) = " " Then
  3.            cont = cont + 1
  4.       End If
  5. 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 Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con Seleccionar Palabra por Palabra
« Respuesta #4 en: 15 Septiembre 2008, 22:31 pm »

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.
Código
  1.  
  2. 'Le establecemos un valor para el máximo
  3. ProgressBar1.Max = cont
  4.  
  5.    For t = 0 To i
  6.  
  7.        ' Valor actual del Progressbar
  8.        ProgressBar1.Value = t
  9.  
  10.        ' Visualizamos el porcentaje en el Label
  11.        Label2 = CLng((ProgressBar1.Value * 100) / ProgressBar1.Max) & " %"
  12.  
  13.  
  14.        DoEvents
  15.  
  16.    Next
  17.  
  18.  


Bueno nuevamente Gracias por todo.


« Última modificación: 15 Septiembre 2008, 22:48 pm por RickJack » En línea

Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Ayuda con Seleccionar Palabra por Palabra
« Respuesta #5 en: 15 Septiembre 2008, 23:04 pm »

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:

Código
  1. Option Explicit
  2. Dim data As String
  3. Dim vdata As Variant
  4. Dim cont, i, pos As Integer
  5.  
  6. Private Sub Form_Load()
  7. RichTextBox.HideSelection = False 'En false para que no se deseleccione al perder el foco
  8. Call contar 'llamada a la función contar
  9. End Sub
  10.  
  11. Private Sub Command1_Click()
  12. ProgressBar1.Max = Len(data)
  13. If pos < ProgressBar1.Max Then
  14.    ProgressBar1.Value = pos
  15. Else
  16.    ProgressBar1.Value = ProgressBar1.Max
  17. End If
  18. If i < cont Then
  19.    RichTextBox.SelStart = pos 'Empezamos a seleccionar en la posicion pos
  20.    RichTextBox.SelLength = Len(vdata(i))  'SelLength es el tamaño de vdata(i)
  21.    pos = pos + (Len(vdata(i)) + 1)  'incrementamos selstart +1 para que no seleccione el espacio
  22.    i = i + 1  'incrementamos i (siguiente palabra)
  23. Else
  24.    i = 0 'Cuando se hayan seleccionado todas las palabras volvemos a la primera
  25.    pos = 0
  26. End If
  27. End Sub
  28.  
  29. Function contar() 'Esta función cuenta cuantas palabras tiene el texto
  30. Dim i As Integer
  31. data = RichTextBox.Text  'data almacena el contenido del texbox
  32. vdata = Split(data, " ")   'separamos data por cada espacio que tenga
  33.  
  34. For i = 1 To Len(data)      'desde el primer caracter hasta el último
  35.    If Mid(data, i, 1) = " " Then   ' si el caracter es un espacio sumamos 1 a cont
  36.        cont = cont + 1
  37.    End If
  38. Next i
  39. cont = cont + 1    ' Al final no hay espacio así que para que seleccione la última palabra sumamos uno al final del proceso
  40. End Function

Solo he añadido esto:

Código
  1. ProgressBar1.Max = Len(data) 'El valor máximo es el total de caracteres
  2. If pos < ProgressBar1.Max Then
  3.    ProgressBar1.Value = pos 'El valor es igual al número de caracter por el que va
  4. Else
  5.    ProgressBar1.Value = ProgressBar1.Max 'Si se pasa del límite ProgressBar1.Value es igual al máximo y ya está
  6. End If
  7.  

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 Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con Seleccionar Palabra por Palabra
« Respuesta #6 en: 15 Septiembre 2008, 23:47 pm »

Tienes razon, es algo rapido, pero no deja de ser una alternativa a tomar en cuenta, creo que reduciendo algo mas quedaria asi:

Código
  1.  
  2. ProgressBar1.Max = cont
  3. For t = 0 To i : ProgressBar1.Value = t: Next
  4.  
  5.  

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines