Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

erich8vb

Localizar e Substituir texto

Recommended Posts

ola amigos tenho que localizar e Substituir uma palavra que esta dentro de um texto

 

Estou usando este código mas ele não substitui.

Private Sub Command1_Click()
st1 = "edu" 'fragmento a procurar
If Text1.Tag = "" Then
 cm = 1
Else
 cm = CDbl(Text1.Tag)
End If

If cm >= Len(Text1.Text) Then cm = 1
For a = cm To Len(EditorHex.RichTextBox2.Text)
If Mid(EditorHex.RichTextBox2.Text, a, Len(st1)) = st1 Then
EditorHex.RichTextBox2.SelStart = a - 1
EditorHex.RichTextBox2.SelLength = Len(st1)
If Text1.Text = EditorHex.RichTextBox2.SelText Then
 EditorHex.RichTextBox2.SetFocus
End If
EditorHex.RichTextBox2.Tag = (a - 1) + Len(st1) 'conserva
Exit For
End If
Next
End Sub

alguem pode me ajudar?

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tbm tenho um outro problema com este código.

Eu queria que localiza-se desse modo:

você clica e destaca a primeira. Clica de novo e destaca a próxima. até chega ao final.

Ele consegue localiza a primeira e o resto não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Erich.

 

Você quer substituir automaticamente?

 

Você pode usar a função replace para subtituir

var = "eu tenho dois pés"

var = replace(a,"dois", "três")

 

resultado:

"eu tenho três pés"

 

Eu não entendi qual a utilidade desse cm. Praticamente sempre ele será 1, então pra que fez esse monte de coisa? Ele só não será 1 quando for 0.

 

E ai invés de você utilizar um for com o mid, você pode usar o instr (in string).

O instr te retorna a posição de uma string dentro de outra string.

 

Então se você fizer:

EditorHex.RichTextBox2.SelStart = instr(EditorHex.RichTextBox2.text,str1) - 1

EditorHex.RichTextBox2.SelLength = Len(st1)

Não precisará do for.

 

E quanto a ir clicando e ir mudando as palavras encontradas, isso preciso pensar um pouco.

Se conseguir uma solução te aviso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara já estou louco com estes códigos. Eu postei o código que não funciona. Este é o código.

Me desculpe.

Pode dar uma olhada neste?

 

Private Sub Command1_Click()
Dim pala As String
'pala = InputBox("Digite a palavra a ser localizada:", "MenssagerCrip")

For b = 0 To Len(EditorHex.RichTextBox2.Text)
EditorHex.RichTextBox2.SelStart = b
EditorHex.RichTextBox2.SelLength = Len(Text1.Text)
If Text1.Text = EditorHex.RichTextBox2.SelText Then
EditorHex.RichTextBox2.SetFocus
GoTo j:
End If
Next
MsgBox "Palavra não localizada"
j:

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Erich, o que eu disse anteriormente continua valendo.

 

Consegui bolar algo aqui para pegar a próxima string.

 

Fiz um modelinho, conforme abaixo:

 

Private seq  As String
Private pos As Integer
Private Sub Command1_Click()

seq = InputBox("digite um sequencia")

If seq <> "" Then
	pos = InStr(Text1.Text, seq)
	If pos > 0 Then
		Text1.SelStart = InStr(Text1.Text, seq) - 1
		Text1.SelLength = Len(seq)
		Text1.SetFocus
	End If
End If

End Sub

Private Sub Command2_Click()

For i = pos + 1 To Len(Text1.Text)
	If Mid(Text1.Text, i, Len(seq)) = seq Then
		Text1.SelStart = i - 1
		Text1.SelLength = Len(seq)
		Text1.SetFocus
		pos = i
		Exit Sub
	End If
Next

End Sub

Private Sub Form_Load()

For i = 1 To 100
	Text1.Text = Text1.Text & (i * Rnd * 1000) & " "
Next

End Sub

Para construir, coloque uma text com multiline e dois botoes. Execute esse e a partir dai, tente desenvolver sua solução.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

teu serto com o substituir.

estou criando um editor hex e na area texto ele localiza e substitui.

vo textar o seu codigo localizar de novo.

obrigado amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hahaha. É. O replace troca todas mesmo.

talves o que você possa fazer é armazenar a parte do código que quer substituir em uma variável, dar o replace e depois voltar a parte junto ao perto do texto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um amigo meu falo da função Count do Replace mas eu não tenho o help do vb.

Por isto não sei usalo.

 

Um outro amigo meu disse q resolveu.

Estudei este código é muito bom mas ele avalia uma letra por fez se eu mudar o numero 1 por 8 ele acumula 8 X mais caraquetéres no RichTextBox2.

 

Public Function SubstituiCaractere(ByVal texto As String)

Dim NovoTexto As String

Dim caractere As String

Dim posicao As Long

For posicao = 1 To Len(texto)

caractere = Mid(texto, posicao, 1)

If caractere = "A" Then

caractere = "E"

End If

NovoTexto = NovoTexto & caractere

Next

SubstituiCaractere = NovoTexto

End Function

 

 

encontrei mas uma e nada. nao funsiona.

 

Function formataValor(ByVal valor As String) As String

valor = valor.trim

If String.IsNullOrEmpty(valor) = True Then

valor = "0"

End If

If valor = "," Or valor = "." Then

valor = "0"

End If

valor = Replace(FormatCurrency(valor, 2), "R$", "")

Return valor

End Function

 

o vb diz q na linha If String.IsNullOrEmpty(valor) = True Then

tem um erro no "." ponto

 

Como o meu professor disse uma fez.

A 1000 maneiras para esfolar o gato.

 

E eu digo. Mas tem q pegar ele primeiro.

Tenho que aprender primeiro. Né!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi um pouco daquele código que avalia uma letra por fez, porem encontrei um problema.

Na variável “valor” a palavra não entra inteira, fica assim.

“is local” e não “localizar” ai o if não reconhece. Na próxima passagem o valor fica assim “izar???T” e ele passa sem reconhecer.

 

Dim SubstituirTexto As String

Dim k As Integer: Dim charr

Dim valor As String

Dim i As Integer

 

k = 0

For k = 1 To Len(RichTextBox2.Text)

charr = (Mid(RichTextBox2.Text, k, 1))

 

valor = valor + charr

i = i + 1

If i = 8 Then

If valor = "program" Then

valor = "1234567"

End If

SubstituirTexto= SubstituirTexto& valor

i = 0

valor = ""

End If

 

Next k

 

End Sub

 

A minha adaptação não deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei este

 

seq = InputBox("digite um sequencia")

If seq <> "" Then
	pos = InStr(Text1.Text, seq)
	If pos > 0 Then
		Text1.SelStart = InStr(Text1.Text, seq) - 1
		Text1.SelLength = Len(seq)
		Text1.SetFocus
	End If
End If

End Sub

'o segundo deu certo

Dim i As Integer
For i = pos + 1 To Len(RichTextBox2.Text)
	If Mid(RichTextBox2.Text, i, Len(Text1)) = Text1 Then
		RichTextBox2.SelStart = i - 1
		RichTextBox2.SelLength = Len(Text1)
		RichTextBox2.SetFocus
		pos = i
		Exit Sub
	End If
Next
obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

é isto.

o de baixo funsionou. porem ele é mais lento que este

 

Dim pala As String
'pala = InputBox("Digite a palavra a ser localizada:", "MenssagerCrip")

For b = 0 To Len(EditorHex.RichTextBox2.Text)
EditorHex.RichTextBox2.SelStart = b
EditorHex.RichTextBox2.SelLength = Len(Text1.Text)
If Text1.Text = EditorHex.RichTextBox2.SelText Then
EditorHex.RichTextBox2.SetFocus
GoTo j:
End If
Next
MsgBox "Palavra não localizada"
j:

mas este nao procura o procimo.

de novo obrigado :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dois estão fazendo basicamente a mesma coisa.

 

Para que o ele dê certo em procurar a próxima palavra, note que armazenei um uma variável private a posição que parou a última consulta, isso para que na próxima vez que for procurar sua palavra, ele não comece do início do texto, e sim de onde já havia parado. Partindo dai pra frente, ele irá procurar de novo sua palavra, achando e marcando.

 

No seu código, ele sempre irá achar a mesma, pois você faz for b = 0 to len(tralala). Com seu b está partindo do zero, ele sempre irá achar a mesma palavra na mesma posição.

 

Ficou claro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.