Ir para conteúdo

Arquivado

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

Sérgio Pitkowsky

[Resolvido] Ler, Alterar e Salvar arquivo de texto

Recommended Posts

Boa tarde, será que alguém pode me ajudar a fazer funcionar um programa em que você clique no botao e ele altere um determinado campo dentro de um arquivo de texto por uma formatacao especifica, como exemplo:

 

Arquivo c:\teste\teste.txt

----------------------------

2008 07 24 RESP VAL 00012 7778

----------------------------

 

neste caso eu tenho que alterar o campo a partir do "RESP" até o 15o caracter posterior (12) que é aleatório.

 

É possível fazer um programa desta forma... lembrando que o valor tem que ter espaco antes e depois.

Tentei algumas formas de replace mas nao consegui pois os numeros apos o texto sao randomicos e nao consegui atribuir uma forma para que a string coletasse somente este intervalo na linha.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sérgio, Seja Bem Vindo ao Fórum Imasters, de uma olhada em nossas regras: Regras do Fórum iMasters

 

A quantidade de caracteres antes do RESP é sempre a mesma??

 

Abraços...

Oi amigo, bom dia, sobre o arquivo ele tem sempre a mesma quantidade de caracteres antes do "RESP", que sao 11 caracteres, e tenho que alterar do 12o caractere até o 27o caractere na sequencia do texto, substituindo o "RESP..........." por "CADASTRO STA___", sendo que do 1o caractere ate o 11o caractere e do 28o caractere até o 31o caractere nao sao alterados, pois estes campos sao fixos.

 

Obrigado pela ajuda ! ! !

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia é você armazenar em variáveis separadas, quebrar seu texto utilizando o SubString com ele, você consegue pegar de tal até tal posiçao, ela separadas em partes você consegue dar o replace só na parte que você quer, eliminar algum texto ou até mesmo concatenar com outra string.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia é você armazenar em variáveis separadas, quebrar seu texto utilizando o SubString com ele, você consegue pegar de tal até tal posiçao, ela separadas em partes você consegue dar o replace só na parte que você quer, eliminar algum texto ou até mesmo concatenar com outra string.

 

Abraços...

Bruno, bom dia, sera que poderia me ajudar com "uma luz" pois nao consegui utilizar a substring.... consigo alterar o texto quando o mesmo esta em uma caixa de texto e nao diretamente no arquivo, tem como demonstrar um exemplo para fazer esta alteracao?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que na verdade não irá alterar diretamente no seu arquivo de texto, você deverá armazenar em alguma variavel, fazer o mesmo processo que faz com a caixa de texto e depois o mais fácil seria apagar o texto do seu arquivo e escrever novamente.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que na verdade não irá alterar diretamente no seu arquivo de texto, você deverá armazenar em alguma variavel, fazer o mesmo processo que faz com a caixa de texto e depois o mais fácil seria apagar o texto do seu arquivo e escrever novamente.

 

Abraços...

Bruno, até consigo alterar um campo que tem carctares fixos, como no exemplo abaixo "RUA", mas nao consigo sobreescrever do campo RUA, 25 caracter ate o 50 caracter por uma mensagem... o meu codigo ficou assim :

Private Sub btnReplace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReplace.Click
		Dim Fs As FileStream = New FileStream(txtArquivo.Text, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
		Dim sw As New StreamWriter(Fs)
		Dim sr As New StreamReader(Fs)
		Dim str As String
		str = sr.ReadToEnd()
		str = str.Replace(txtTexto.Text, txtNovaTexto.Text)
		Fs.Position = 0
		Fs.SetLength(str.Length)
		sw.Write(str)
		sw.Flush()
		sw.Close()
		Fs.Close()
	End Sub
End Class
Estou usando uma base similar a de baixo:

1002Joao Lima Bueno Rua da Abolicao 12 119243159807061955

1003Carlos Ramirez Rua 25 de Janeiro 12 110255313402031960

1004Samanta Cinceniti Rua Mirassol 234 110224232101071970

1005Marcos Barbosa Rua dos Girassois 12 110356560810081980

 

Desculpe mas e que nao entendi como trabalhar com as substring.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um exemplo onde alterei o João da primeira linha por quintelab e criei uma nova linha com o texto. Só não achei como apagar a primeira linha.

Espero que te ajude:

Private Sub btnReplace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
		Dim Fs As FileStream = New FileStream("C:\Teste.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
		Dim Sw As New StreamWriter(Fs)
		Dim Sr As New StreamReader(Fs)
		Dim Texto, Posicao1, Posicao2, Posicao3 As String
		Dim TextoNovo As String
		Dim PalavraNova As String = "Quintelab"

		Texto = Sr.ReadLine()
		Posicao1 = Texto.Substring(0, 4)
		Posicao2 = Texto.Substring(4, 4)
		Posicao3 = Texto.Substring(8, (Len(Texto) - 8))
		TextoNovo = Posicao1 & PalavraNova & Posicao3

		Sw.Flush()
		Sw.Close()
		Fs.Close()

		CriaNovaLinha(TextoNovo)
	End Sub

	Private Sub CriaNovaLinha(ByVal Texto As String)
		Dim arquivo As IO.StreamWriter
		arquivo = IO.File.AppendText("c:\Teste.txt")
		arquivo.WriteLine(Texto)
		arquivo.Close()
	End Sub

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um exemplo onde alterei o João da primeira linha por quintelab e criei uma nova linha com o texto. Só não achei como apagar a primeira linha.

Espero que te ajude:

Private Sub btnReplace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
		Dim Fs As FileStream = New FileStream("C:\Teste.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
		Dim Sw As New StreamWriter(Fs)
		Dim Sr As New StreamReader(Fs)
		Dim Texto, Posicao1, Posicao2, Posicao3 As String
		Dim TextoNovo As String
		Dim PalavraNova As String = "Quintelab"

		Texto = Sr.ReadLine()
		Posicao1 = Texto.Substring(0, 4)
		Posicao2 = Texto.Substring(4, 4)
		Posicao3 = Texto.Substring(8, (Len(Texto) - 8))
		TextoNovo = Posicao1 & PalavraNova & Posicao3

		Sw.Flush()
		Sw.Close()
		Fs.Close()

		CriaNovaLinha(TextoNovo)
	End Sub

	Private Sub CriaNovaLinha(ByVal Texto As String)
		Dim arquivo As IO.StreamWriter
		arquivo = IO.File.AppendText("c:\Teste.txt")
		arquivo.WriteLine(Texto)
		arquivo.Close()
	End Sub

Abraços...

Bruno, obrigado pela ajuda, fiz um novo post com o código que estou utilizando com o cabeçalho ], os dados e o indice de finalização do arquivo. Também não consegui adaptar o código para ler as demais linhas. Vamos ver se consigo o código para esta aplicação, e depoi spostar aqui para ajudar alguém com a mesma dificuldade.

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.