Ir para conteúdo

Arquivado

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

JoeFather

Sobre o comando "Replace"

Recommended Posts

Olá!Eu já fui ajudado a resolver um probleminha pelo moderador do fórum, quanto a substituir letras de uma palavra por outras, através do exemplo abaixo:s = "baba"s = replace(s, "b", "c")s = replace(s, "a", "e")msgbox sRealmente dá certo!Agora suponhamos que eu tenha a palavra "Babe" e queira converte-la em "Bebi", usando o Replace como eu faria? Eu fiz o teste e ele substitui a letra "a" por "e" e na próxima linha de comando substitui todas as letras "e" por "i", transformando a palavra no final em "Bibi". Eu sei que no Replace você pode especificar qual letra quer trocar, mas não queria que fosse um código para uma palavra específica, ou seja, qualquer palavra que eu coloque possa ser alterada sem correr o risco de trocar duas vezes a mesma letra.Tem jeito usando o Replace mesmo ou existe outro comando ou função?Um grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!Eu já fui ajudado a resolver um probleminha pelo moderador do fórum, quanto a substituir letras de uma palavra por outras, através do exemplo abaixo:s = "baba"s = replace(s, "b", "c")s = replace(s, "a", "e")msgbox sRealmente dá certo!Agora suponhamos que eu tenha a palavra "Babe" e queira converte-la em "Bebi", usando o Replace como eu faria? Eu fiz o teste e ele substitui a letra "a" por "e" e na próxima linha de comando substitui todas as letras "e" por "i", transformando a palavra no final em "Bibi". Eu sei que no Replace você pode especificar qual letra quer trocar, mas não queria que fosse um código para uma palavra específica, ou seja, qualquer palavra que eu coloque possa ser alterada sem correr o risco de trocar duas vezes a mesma letra.Tem jeito usando o Replace mesmo ou existe outro comando ou função?Um grande abraço!

Se fizer replace(text1.text, text2.text , text3.text) não dá certo? É algo assim que você precisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fizer replace(text1.text, text2.text , text3.text) não dá certo? É algo assim que você precisa?

Creio que não daria certo, pois quero trocar letras por outras letras e não palavras por outras palavras!Gratize!

Compartilhar este post


Link para o post
Compartilhar em outros sites

EU sei disso. Faça o seguinte. Coloque três text no seu programa.A primeira conterá a palavra que quer usar para trocar as letras.A segunda a letra que vai ser trocada.A terceira a letra pela qual vai ser trocadaAi você usa a fórmula do jeito que passei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente eu tenha entendido errado, mas neste caso, você teria que começar de traz pra frente, dai o babe, viraria babi, e depois bebi, isso seria então o cso de descobrir se a letra já pertence a palavra.bom para ficar mais generico, você poderia criar um array com o numero de letras da pavra, assim você poderia gravar cada letra da palavra ( se não me engano é a função mid que você consegue selecionar a partir de qual ponto da palavra vai começar sua nova string) e depois é só fazer um for i = 0 to (len(string_original.text))if array(i) = (letra a ser substituida) then array(i) = (nova letra)nextdepois é só remontar a string originalnão teste para saber se dá certo, mas acredito que possa funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Somente utilizando Replace acredito que não será satisfatória e também genérico, ou seja, que seja utilizado para todas as situações. A priora pensei em uma solução que seria mais ou menos o seguinte, utilize a função Instr para que seja localizado a posições das strings, depois utilize o Replace. Por exemplo:Babe -> Instr em "a" depois Replace em "a" para "e" o Start deverá ser a posição retornada em Instr o count deverá ser 1, faça este procedimento em um laço de repetição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

JoeFather, eu testei e dá certo sim fazer da forma como falei, segue sub abaixo:Private Sub Command1_Click()S = Text1.TextS = Replace(S, Text2.Text, Text3.Text)Text1.Text = SEnd SubDessa maneira você consegue deixar genérico, trocar cada letra por vez e ver as mudanças.Vai funcionar como se fosse o substituir do office.Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores, fiz alguns testes e não deu certo, mas não foi por culpa de vocês. Creio que eu, pensando bem, não soube explicar o que eu queria fazer na verdade!Temos a palavra BABE, digamos que quero transforma-la de uma só vez em BEBI, usando um só comando, como eu faria? O que estou buscando na verdade é um codificador de palavras, onde eu digito uma palavra qualquer e ao clicar no botão de comando, eu codifico esta palavra, alterando-a completamente, mudando somente letras específicas por outra, ou seja, as letras “A” por “E”, letras “E” por “I” e assim por diante, sem precisar que o comando retorne ao início da palavra, pois se assim o fizer, corro o risco de substituir uma letra que já foi alterada.Um grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe Joe, realmente não tinha entendido. Você precisa de algo onde a palavra seja genérica, mas as letras a seram alteradas sejam já definidas né.Não sei não, tenta pensar em algo utilizando if. Com certeza vai dar um pouco de trabalho, mas isso que é o legal né.Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer o que mencionei no post anterior, pois havia dito que para fazer como deseja somente utilizando o Replace não seria satisfatório. Segue abaixo o post.

Somente utilizando Replace acredito que não será satisfatória e também genérico, ou seja, que seja utilizado para todas as situações. A priora pensei em uma solução que seria mais ou menos o seguinte, utilize a função Instr para que seja localizado a posições das strings, depois utilize o Replace.Por exemplo:Babe -> Instr em "a" depois Replace em "a" para "e" o Start deverá ser a posição retornada em Instr o count deverá ser 1, faça este procedimento em um laço de repetição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer o que mencionei no post anterior, pois havia dito que para fazer como deseja somente utilizando o Replace não seria satisfatório. Segue abaixo o post.

Somente utilizando Replace acredito que não será satisfatória e também genérico, ou seja, que seja utilizado para todas as situações. A priora pensei em uma solução que seria mais ou menos o seguinte, utilize a função Instr para que seja localizado a posições das strings, depois utilize o Replace.Por exemplo:Babe -> Instr em "a" depois Replace em "a" para "e" o Start deverá ser a posição retornada em Instr o count deverá ser 1, faça este procedimento em um laço de repetição.

Luiz, na primeira vez que li o código que sugeriu, acehi que iria parar no mesmo que as outras maneiras citadas. Por isso vou ser sincero que não testei e não foi por ter certeza que não daria certo, é que não sou muito especialista em VB e estou deverás enferrujado, em outras palavras, iria apanhar do comando sugerido.Mas, como estamos aqui para aprender, tentei fazer o que sugeriu e cheguei ao mesmo Bibi. Abaixo segue o código da forma que usei para que você me dê um help em onde eu estou errando:
Private Sub cmd_replace_Click()Dim var_local, var_procura, var_encontrou, var_posicao'txt_replace é onde a palavra Babe está!var_local = txt_replacevar_procura = "a"var_encontrou = 0var_posicao = 1var_encontrou = InStr(var_posicao, var_local, var_procura)If var_encontrou > 0 Then	txt_replace = Replace(var_local, "a", "e")	var_procura = "e"	var_posicao = var_encontrou	var_encontrou = 0	var_local = txt_replace	var_encontrou = InStr(var_posicao, var_local, var_procura)		If var_encontrou > 0 Then		txt_replace = Replace(var_local, "e", "i")	End IfEnd IfEnd Sub
Grato pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei se você testou o que eu falei de fazer um looping para a situaçãotipodim a as integerdim i as longdim res as stringi= len(trim(text1.text)) ' onde vais estar a palavrafor a=0 to iif mid(trim(text1.text),a,(a+1)) = "e" str = str & "i"elseif mid(trim(text1.text),a,(a+1)) = "a" str = str & "e"else str = str & mid(trim(text1.text),a,(a+1))end ifnexteu não testei esse codigo, mas acredito que possa resolver

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei se você testou o que eu falei de fazer um looping para a situaçãotipodim a as integerdim i as longdim res as stringi= len(trim(text1.text)) ' onde vais estar a palavrafor a=0 to iif mid(trim(text1.text),a,(a+1)) = "e" str = str & "i"elseif mid(trim(text1.text),a,(a+1)) = "a" str = str & "e"else str = str & mid(trim(text1.text),a,(a+1))end ifnexteu não testei esse codigo, mas acredito que possa resolver

Vou testar meu amigo, valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, eu testei e deu o seguinte erro:

 

Erro em tempo de execução '5':

Argumento ou chamada de procedimento inválida.

 

Tive que colocar o SetFocus na TXT pois estava dando o erro '2185', por fazer referência a um controle que não tem o foco.

 

Errei em algum lugar?

 

Private Sub cmd_replace_Click()Dim a As IntegerDim i As LongDim Str As Stringtxt_replace.SetFocusi = Len(Trim(txt_replace.Text)) ' onde vais estar a palavraFor a = 0 To iIf Mid(Trim(txt_replace.Text), a, (a + 1)) = "e" Then	Str = Str & "i"ElseIf Mid(Trim(txt_replace.Text), a, (a + 1)) = "a" Then	Str = Str & "e"Else	Str = Str & Mid(Trim(txt_replace.Text), a, (a + 1))End IfNextEnd Sub

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, eu testei e deu o seguinte erro:

 

Erro em tempo de execução '5':

Argumento ou chamada de procedimento inválida.

 

Tive que colocar o SetFocus na TXT pois estava dando o erro '2185', por fazer referência a um controle que não tem o foco.

 

Errei em algum lugar?

 

Private Sub cmd_replace_Click()Dim a As IntegerDim i As LongDim Str As Stringtxt_replace.SetFocusi = Len(Trim(txt_replace.Text)) ' onde vai estar a palavraFor a = 0 To iIf Mid(Trim(txt_replace.Text), a, (a + 1)) = "e" Then	Str = Str & "i"ElseIf Mid(Trim(txt_replace.Text), a, (a + 1)) = "a" Then	Str = Str & "e"Else	Str = Str & Mid(Trim(txt_replace.Text), a, (a + 1))End IfNextEnd Sub
Um abraço.
putz agora que eu percebi uma burada nesse negocio,

1° muda o tipo do "a para long"

depois para entrar no for poe "for a = 1 to i"

e depois dentro do mid "não é a+1 e sim só 1"

 

bom acabei de testar com a palavra que você disse (transformar babe em bebi) e deu certo e nem precisei colocar o foco no text.

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo!! Testei da seguinte forma com palavras sem acento:

 

Private Sub cmd_replace_Click()Dim a As LongDim i As LongDim str As Stringtxt_replace.SetFocusi = Len(Trim(txt_replace.Text)) ' onde vais estar a palavraFor a = 1 To iIf Mid(Trim(txt_replace.Text), a, 1) = "e" Then	str = str & "i"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "a" Then   str = str & "e"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "b" Then   str = str & "c"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "c" Then   str = str & "d"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "d" Then   str = str & "f"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "f" Then   str = str & "g"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "g" Then   str = str & "h"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "h" Then   str = str & "j"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "j" Then   str = str & "k"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "k" Then   str = str & "l"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "l" Then   str = str & "m"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "m" Then   str = str & "n"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "n" Then   str = str & "p"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "i" Then   str = str & "o"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "o" Then   str = str & "u"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "u" Then   str = str & "y"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "y" Then   str = str & "a"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "p" Then   str = str & "q"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "q" Then   str = str & "r"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "r" Then   str = str & "s"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "s" Then   str = str & "t"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "t" Then   str = str & "v"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "v" Then   str = str & "w"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "w" Then   str = str & "x"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "x" Then   str = str & "z"ElseIf Mid(Trim(txt_replace.Text), a, 1) = "z" Then   str = str & "b"Else   str = str & Mid(Trim(txt_replace.Text), a, 1)   End IfNexttxt_replace = strEnd Sub

Dá para escrever qualquer frase e codificá-la! Muito legal, vou usar isso num livro que estou escrevendo de ficção! Grato a você e aos demais amigos que colaboraram...

 

Agora, só para registrar, hoje de manhã antes de ver a última postagem eu consegui fazer o que eu queria de uma forma um pouco diferente, que eu sabia que daria certo, mas realmente eu buscava outra solução.

 

Crei quatro caixas de textos, cada uma para uma letra. Depois coloquei nas propriedades das mesmas uma máscara para entrar somente uma letra e deixei como auto-tabulação.

Usei o código abaixo para transformar a palavra "Babe" em "Ceci"

 

Dim var_l1, var_l2, var_l3, var_l4If txt_l1 = "B" Then	var_l1 = "C"End IfIf txt_l2 = "A" Then	var_l2 = "E"End IfIf txt_l3 = "B" Then	var_l3 = "C"End IfIf txt_l4 = "E" Then	var_l4 = "I"End Iftxt_replace = var_l1 & var_l2 & var_l3 & var_l4

Um grande abraço à todos!

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.