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
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...
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
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
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
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)