LOCALIZAR SUBSTRINGS EM UM ARQUIVO DE TEXTO

CANARIOUDI 17/08/2012 17:23:01
#408119
Boa tarde pessoal,

preciso de uma ajuda,

tenho um arquivo de texto e quero fazer o seguinte, Se a linha começar com a string [Ô]54[Ô] e na posição 16 conter a substring [Ô]22[Ô]
quero que a substring [Ô]22[Ô] altere para [Ô]01[Ô].

consigo localizar e alterar, só que localiza e altera somente na [ô]primeira linha[ô], preciso que o codigo percorra [ô][txt-color=#0000f0]todas as linhas[/txt-color][ô] do texto
localizando e alterando os dados

to usando esse código:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim nome As String = TextBox1.Text

Dim substring As String
Dim substring1 As String


substring = nome.Substring(0, 2)

substring1 = nome.Substring(16, 2)


If substring = [Ô]54[Ô] And substring1 = [Ô]22[Ô] Then

Mid (TextBox1.Text, 17) = [Ô]01[Ô]


End If

End Sub

\\\\\

obrigado
JABA 18/08/2012 00:29:14
#408126
Resposta escolhida
Após a primeira verificação, tem que procurar o proximo numero 54 e 16 posicoes depois dele verificar se existe o numero 22 novamente, é isso? vai ser sempre assim?

vlw
CANARIOUDI 18/08/2012 12:36:58
#408131
Isso mesmo, só que tem que procurar na próxima linha do texto.

meu arquivo tem mais de 1000 linhas, e preciso que faça a verificação em todas as linhas.


vlww
JABA 18/08/2012 15:19:58
#408132
Cara, eu fiz o codigo abaixo de cabeça mesmo. Não testei e não tenho nem ideia se está funcionando. Faz uma depuração no código e veja se pelos menos é esse o caminho. Qualquer coisa, faz uma adaptação ai.

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim nome As String = TextBox1.Text
Try
For i as integer = 0 to nome.length-1
If (nome.Substring(i*16, 2) = [Ô]54[Ô] OrElse nome.Substring((i*16)+2, 2) = [Ô]54[Ô] ) AndAlso nome.Substring((i+1)*16, 2) = [Ô]22[Ô] Then
[ô]Se chegou aqui é porque está funcionando. Verifique se a funcao abaixo está fazendo certinho mesmo.
Mid (TextBox1.Text, ((i+1)*16)+1) = [Ô]01[Ô]
end If
Next
Catch

End Try

End Sub


vlw
CANARIOUDI 18/08/2012 19:55:14
#408136
Jaba, não deu certo....

eu quero localizar linha por linha e onde começar com a substring [Ô]54[Ô] e na posição 16 conter a substring [Ô]22[Ô], quero que a substring [Ô]22[Ô]
seja alterada para [Ô]01[Ô]..

no seu código não respeita a substring [Ô]22[Ô], quando ele acha a substring [Ô]54[Ô] ele altera independente do numero que estiver na posição 16 para [Ô]01[Ô]

o meu código faz correto, só que não passa para as linhas abaixo.
o meu arquivo de texto tem mais de 1000 linhas e preciso que a verificação seja feita em todas as linhas..

penso que daria certo com algo assim... NEXT LINE...


OBRIGADO PELA SUA AJUDA..

fico aguardando mais alguma resposta..

vlw



JABA 19/08/2012 00:03:12
#408144
Coloca ai umas dez linhas desse texto pra mim dar uma analisada e tentar algo aqui pra você.

vlw
JABA 19/08/2012 16:43:42
#408160
Cara, fiz esse codigo abaixo e funcionou. Eu fiz um pouco diferente das configurações que você me passou. No exemplo eu estou me baseando na posicao 7 e não 16. Se não servir para o teu caso, dá um estudada nele e adapte para o que você realmente quer.
Para preencher o Textbox com esse codigo, é só pegar a saída do metodo, fazer um loop em cada posicao do array e concatenar cada uma para somente uma string. Ou seja, vc vai remontar a string pelo array.

public sub getTexto(texto as string) as string()
dim delimitador as string = [Ô]54[Ô];
dim d as Char() = delimitador.ToCharArray();
return texto.Split(d, StringSplitOptions.RemoveEmptyEntries);
end sub

public getTexto as String()

dim texto as String() = getTexto([Ô]54Rodrigo2254Santana54Porto54AAAAA2254bbbbb54[Ô]);
for i as integer = 0 To texto.Length - 1

[ô] No teu caso seria algo como --> if texto(i).Length = 16 AndAlso texto(i).Substring(14, 2) = [Ô]22[Ô])

If texto(i).Length = 7 AndAlso texto(i).Substring(5, 2) = [Ô]22[Ô])

[ô]substitui o 22 pelo 01
texto(i) = texto(i).Replace([Ô]22[Ô], [Ô]01[Ô]);

[ô]Se quiser inseri no final o 01 use isso:
[ô]texto(i) = texto(i).Insert(texto(i).Length, [Ô]01[Ô]);

End if

return texto;

end sub
CANARIOUDI 19/08/2012 19:34:12
#408163
vou testar aqui.. depois te falo

vlw irmão.. pela atenção..

CANARIOUDI 19/08/2012 19:38:01
#408164
ah se quiser da uma olhada
esse é um trecho do texto..

547120851600017422
547120852200017422
5465339590000127551
5470996392000176551
537120852200017422
547120812200018722
JABA 19/08/2012 22:38:55
#408170
Eu estou usando o [Ô]54[Ô] como delimitador, por causa disso, no array gerado, não terá o valor 54 na primeira posicao de cada registro. Para corrigir isso, você terá que adicionar o [Ô]54[Ô] no primeiro indice do array. Veja como ficou tudo abaixo:

public sub getTexto(texto as string) as string()
dim delimitador as string = [Ô]54[Ô]
dim d as Char() = delimitador.ToCharArray()
return texto.Split(d, StringSplitOptions.RemoveEmptyEntries)
end sub

public getTexto as String()

dim texto as String() = getTexto([Ô]5471208516000174225471208522000174225465339590000127551[Ô])
for i as integer = 0 To texto.Length - 1

if texto(i).Length = 16 AndAlso texto(i).Substring(14, 2) = [Ô]22[Ô])

[ô]substitui o 22 pelo 01 (Cuidado com esse replace, pois ele substituirá todos os [Ô]22[Ô] por [Ô]01[Ô] na sequencia atual e e não servirá para o seu caso)
[ô]texto(i) = texto(i).Replace([Ô]22[Ô], [Ô]01[Ô])

[ô]Tente isso: (não sei se estou removendo e inserindo na posicao certa, qualquer coisa, faça uns ajustes.
[ô]A ideia é deletar o [Ô]22[Ô] no final e inserir o [Ô]01[Ô] no lugar dele)
texto(i) = texto(i).Remove(texto.Length-3,2)
texto(i) = texto(i).Insert(texto.Length-1, [Ô]01[Ô])

End if

[ô]Adiciona o [Ô]54[Ô] novamente
for i as integer = 0 To texto.Length - 1
texto(i) = texto(i).Insert(0, [Ô]54[Ô])
next

return texto

end sub

Testa ai e me dá um retorno.
JABA 20/08/2012 11:07:21
#408193
Fiz de outra forma aqui. Dá uma olhada ai e me diga se é isso mesmo.

vlw
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas