contar saltos de linea RichTextBox VB

Iniciado por Carlosnuel, 4 Abril 2007, 03:42 AM

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

Carlosnuel

Hola estoy haciendo un proyecto para la escuela el cual consiste en abrir un documento de texto contar los saltos de linea y cortar el documento ejemplo

#de lineas maximo por hoja = 25
# numero de lineas del documento = 100

Total de paginas generadas = 100/25 = 4

todo esto lo estoy manejando por medio de un richtextbox pero al momento de realizar la búsqueda no funciona mi código llevo toda la tarde y no encuentro solución podrían ayudarme



Dim sText, sFnd
Dim lPos
Dim cont As Integer

  cont = 1
  sText = RichTextBox1.Text 
  sFnd = vbCrLf     'Texto buscado (salto de linea).

'pretendo ir avanzando por el texto para hacer una comparacion
'buscando el salto de linea
 
While Len(RichTextBox1.Text) > cont

lPos = InStr(1, sText, sFnd)
  If lPos > 0 Then    'Se encontró la cadena

    call MsgBox("La cadena se encontró en la posición " & lPos, vbExclamation)
' estos msgbox son temporales, después los sustituiré por la continuación del programa
  Else
    call MsgBox("No se encontró la cadena")
  End If
   cont = cont + 1
   Wend




el problema que tengo es que no puedo moverme entre todos los caracteres que hay en el richtexbox1 para buscar los saltos de linea

ojala puedan ayudarme

Syphroot


El problema al parecer esta en la primer linea dentro del bucle while:


lPos = InStr(1, sText, sFnd)


el primer argumento ponle tu contador "cont", ya que es la posicion  en la va a empezar a buscar las coincidencias


lPos = InStr(cont, sText, sFnd)


asi en cada iteración el contador incrementa y busca en la siguiente posición...


Carlosnuel

gracias por el consejo... pero lo he implementado de la siguiente forma (con un ciclo FOR) y funciona pero por ejemplo si tengo en el espacio 3 un salto de linea, en el espacio 5 otro y en el 7 otro, lo que hace mi programa es que se detiene en el espacio 3 e imprime como 20 veces que esta en el espacio 3 y asi para el 5 y 7

este es el codigo ayudenme porfavor


Dim sText, sFnd
Dim lPos
Dim cont As Integer

    cont = 1
  'Texto en el cual se va a buscar, puede ser un cuadro de texto o cualquier String.
 
  sText = RichTextBox1.Text
  sFnd = vbCrLf 'Texto buscado.

  NumText = Len(RichTextBox1.Text)

  For i = 1 To NumText
   lPos = InStr(i, sText, sFnd)
  If lPos > 0 Then
    Call MsgBox("La cadena se encontró en la posición " & lPos, vbExclamation)
  Else
    Call MsgBox("No se encontró la cadena")
  End If
   'cont = cont + 1
Next i



CeLaYa

creo que el problema es el contador "i" si tienes un salto de linea en la posicion 3 al entrar al ciclo te va a mandar 3 veces el mensaje.


lo que debes hacer es mover tu contador al encontar un salto de linea, tú código quedaría asi:

Dim sText, sFnd
Dim lPos
Dim cont As Integer

    cont = 1
  'Texto en el cual se va a buscar, puede ser un cuadro de texto o cualquier String.
 
  sText = RichTextBox1.Text
  sFnd = vbCrLf 'Texto buscado.

  NumText = Len(RichTextBox1.Text)

  For i = 1 To NumText
   lPos = InStr(i, sText, sFnd)
  If lPos > 0 Then
    Call MsgBox("La cadena se encontró en la posición " & lPos, vbExclamation)
   

      'Aqui mueves "i" despues del salto de linea encontrado
      i = lpos+2



  Else
    Call MsgBox("No se encontró la cadena")
  End If
   'cont = cont + 1
Next i


"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

Carlosnuel

hay si funciona T.T

Celaya eres mi nuevo dios en Visual Basic...

gracias por el consejo

oye una pregunta

porque i = lpos + 2

no entiendo porque lo incrementas 2 veces


CeLaYa

el salto de linea se compone de dos partes:


vb       cr              lf
       Fin de      Salto de
        linea         linea

cuando usas la función InStr te va a devolver la posición del fin de linea, en esta caso 3, lo incremento en dos para que sigua el bucle despues del fin de linea(cr, posición 3) y el salto de linea(lf, posición 4) y continue en el siguiente caracter de la cadena (posición 5)

"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.