Usuário com melhor resposta
Quais comandos devo usar para deletar uma linha num arquivo texto?

Pergunta
-
Olá, estou querendo montar uma rotina que deleta uma linha num arquivo texto em VB, só não sei quais comandos devo usar. Seria algo do tipo:
'Percorre o arquivo para conferir se o que está em TextBox1.Text faz consta na lista
Using sr As StreamReader = File.OpenText(Caminho)
Do While sr.Peek() >= 0If TextBox1.Text = (sr.ReadLine) Then
aqui preciso deletar a linha mas não sei quais comandos devo usar. Alguém pode me dar essa força?
End If
Loop
End UsingGrato/Durval
Respostas
-
Respondi a você na outra thread.
Segue com remoção de itens da listagem.
Private Sub TextBox1_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick, TextBox2.MouseDoubleClick, TextBox3.MouseDoubleClick, TextBox4.MouseDoubleClick Remove_lista(CType(sender, TextBox)) End Sub Private Sub Remove_lista(nome As TextBox) Dim J As Int32 Dim Caminho As String = "C:\Users\Mariano\Desktop\Novo Documento de Texto.txt" Dim lista As New List(Of String) Try Using sr As StreamReader = File.OpenText(Caminho) Do While sr.Peek() >= 0 lista.Add(sr.ReadLine) Loop End Using 'carrego a lista atual lista.Remove(nome.Text) nome.Text = "" File.AppendAllText(Caminho & ".tmp", "") 'crio arquivo temporário For J = 0 To lista.Count - 1 Using sw As StreamWriter = File.AppendText(Caminho & ".tmp") sw.WriteLine(lista.Item(J)) 'acrescento na lista temporária End Using Next File.Delete(Caminho) 'deleto a listagewm anterior File.Move(Caminho & ".tmp", Caminho) Carrega_lista() Catch ex As Exception MsgBox("Erro ao deletar item da listagem.") End Try End Sub
MARIANO1776
- Sugerido como Resposta Fabio I sexta-feira, 8 de junho de 2018 13:20
- Marcado como Resposta Durval Teixeira sábado, 9 de junho de 2018 03:10
-
Mariano, deste um show de cordialidade, obrigado mesmo. Mudei apenas algumas coisas que já eram do meu uso, como caminho e etc..
Completo, ficou assim:
Imports System.Collections.Generic
Imports System.IO
Public Class form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Carrega_lista()
End Sub
Private Sub Carrega_lista()
Dim lista As New List(Of String)
Dim MySource As New AutoCompleteStringCollection()
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim n As Integer
Using sr As StreamReader = File.OpenText(Caminho) 'Percorre o arquivo para carregar a lista para o AutoComplete
Do While sr.Peek() >= 0
lista.Add(sr.ReadLine)
Loop
End Using
MySource.AddRange(lista.ToArray)
Dim nome As TextBox() = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
For n = 0 To 3
nome(n).AutoCompleteCustomSource = MySource
nome(n).AutoCompleteMode = AutoCompleteMode.Suggest
nome(n).AutoCompleteSource = AutoCompleteSource.CustomSource
Next
End Sub
Private Sub Atualiza_lista(nome As TextBox)
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim lista As New List(Of String)
Using sr As StreamReader = File.OpenText(Caminho)
Do While sr.Peek() >= 0
lista.Add(sr.ReadLine)
Loop
End Using 'carrego a lista atual
If lista.IndexOf(nome.Text) = -1 Then 'verifico se a palavra já não está na lista.
Using sw As StreamWriter = File.AppendText(Caminho)
sw.WriteLine(nome.Text) 'se não estiver, acrescento na lista
End Using
End If
End Sub
Private Sub TextBox_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave, TextBox2.Leave, TextBox3.Leave, TextBox4.Leave
Atualiza_lista(CType(sender, TextBox))
Carrega_lista()
End Sub
Private Sub TextBox_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick, TextBox2.MouseDoubleClick, TextBox3.MouseDoubleClick, TextBox4.MouseDoubleClick
Remove_lista(CType(sender, TextBox))
End Sub
Private Sub Remove_lista(nome As TextBox)
Dim J As Int32
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim lista As New List(Of String)
Try
Using sr As StreamReader = File.OpenText(Caminho)
Do While sr.Peek() >= 0
lista.Add(sr.ReadLine)
Loop
End Using 'carrego a lista atual
lista.Remove(nome.Text)
nome.Text = ""
File.AppendAllText(Caminho & ".tmp", "") 'crio arquivo temporário
For J = 0 To lista.Count - 1
Using sw As StreamWriter = File.AppendText(Caminho & ".tmp")
sw.WriteLine(lista.Item(J)) 'acrescento na lista temporária
End Using
Next
File.Delete(Caminho) 'deleto a listagewm anterior
File.Move(Caminho & ".tmp", Caminho)
Carrega_lista()
Catch ex As Exception
MsgBox("Erro ao deletar item da listagem.")
End Try
End Sub
End ClassMuito grato, abraço e obrigado.
Durval
- Marcado como Resposta Durval Teixeira sábado, 9 de junho de 2018 17:03
Todas as Respostas
-
-
-
Fabio, minha rotina ficou assim com tua dica, da uma forcinha e veja como devo utilizar tua dica dentro dela. Do jeito que está não remove um nome da lista de nomes no arquivo texto.
Veja que essa rotina não insere nomes no endereço "C:\Usuarios\Home1\nomes_" & 4 & ".txt", então tem que abrir um arquivo e inserir alguns nomes e depois testar a rotina.
Private Sub TextBox_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDoubleClick, TextBox2.MouseDoubleClick, TextBox3.MouseDoubleClick, TextBox4.MouseDoubleClick
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim nome = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
For u = 0 To 3
If sender Is nome(u) Then
n = u
Exit For
End If
Next
'Percorre o arquivo até encontrar nome(n).Text
Using sr As StreamReader = File.OpenText(Caminho)
Do While sr.Peek() >= 0
If nome(n).Text = (sr.ReadLine) Then
MsgBox("Quer remover " & nome(n).Text & " ?")
nome(n).Text = " "
sr.ReadLine.Remove(0, (nome(n).Text).Length)
End If
Loop
End Using
End Sub -
Durval Teixeira,
O que eu montei acima não serve. Desculpe, viajei.
Mas achei um código exemplo muito bom para o que você quer.
=======================================Apagar linhas especificas do .txtGooden
Publicado 10 de Março de 2009
https://www.portugal-a-programar.pt/forums/topic/25760-apagar-linhas-especificas-do-txt/=======================================
Public Class Form1 Public Remove_text As Integer = 1 Public replace_text As Integer = 2 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Debug.WriteLine("START PROGRAM") read("dddddddd", "gggggggg", "c:\teste.txt") Modify_File("c:\teste.txt", "C:\Tester.txt", Remove_text, "dddddddd", "Replacement") Modify_File("c:\teste.txt", "C:\Tester2.txt", replace_text, "dddddddd", "Replacement") End Sub Public Sub Modify_File(ByVal sFileName As String, ByVal Sfileoutput As String, ByVal Operation As Integer, ByVal Str1 As String, ByVal str2 As String) If IO.File.Exists(sFileName) Then Dim srFileReader As System.IO.StreamReader Dim sInputLine As String Dim watch As Boolean = False srFileReader = System.IO.File.OpenText(sFileName) sInputLine = srFileReader.ReadLine() Dim objStreamWriter As IO.StreamWriter = New IO.StreamWriter(Sfileoutput, True, System.Text.Encoding.Default) Do Until sInputLine Is Nothing If sInputLine = Str1 Then If Operation = 1 Then 'Remove line 'Como é para remover nao vou fazer nada apenas Imprimir em debug. Debug.Write("Remover Linha") ElseIf Operation = 2 Then 'Replace line 'Substituir ou seja envez de imprimir 1 imprime a outra. objStreamWriter.WriteLine(str2) Else 'remove 'Defeito é remover nao vou fazer nada apenas Imprimir em debug. Debug.Write("Remover Linha") End If Else objStreamWriter.WriteLine(sInputLine) End If sInputLine = srFileReader.ReadLine() Loop objStreamWriter.Close() Else MsgBox("Ficheiro não existe!") End If End Sub Public Sub read(ByVal startline As String, ByVal endline As String, ByVal sFileName As String) If IO.File.Exists(sFileName) Then Dim srFileReader As System.IO.StreamReader Dim sInputLine As String Dim watch As Boolean = False srFileReader = System.IO.File.OpenText(sFileName) sInputLine = srFileReader.ReadLine() Do Until sInputLine Is Nothing If sInputLine = startline Then watch = True End If If watch = True Then TextBox1.Text = TextBox1.Text & sInputLine & vbCrLf End If If sInputLine = endline Then watch = False End If sInputLine = srFileReader.ReadLine() Loop Else MsgBox("Ficheiro não existe!") End If End Sub End Class
Tenta adaptar para o que você precisa. Eu vou depurar esse código mais aqui. É que estou sem tempo hoje...
[]'s,
Fabio I.- Editado Fabio I quinta-feira, 7 de junho de 2018 19:16
- Sugerido como Resposta João Paulo [] sexta-feira, 8 de junho de 2018 01:30
-
-
Respondi a você na outra thread.
Segue com remoção de itens da listagem.
Private Sub TextBox1_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick, TextBox2.MouseDoubleClick, TextBox3.MouseDoubleClick, TextBox4.MouseDoubleClick Remove_lista(CType(sender, TextBox)) End Sub Private Sub Remove_lista(nome As TextBox) Dim J As Int32 Dim Caminho As String = "C:\Users\Mariano\Desktop\Novo Documento de Texto.txt" Dim lista As New List(Of String) Try Using sr As StreamReader = File.OpenText(Caminho) Do While sr.Peek() >= 0 lista.Add(sr.ReadLine) Loop End Using 'carrego a lista atual lista.Remove(nome.Text) nome.Text = "" File.AppendAllText(Caminho & ".tmp", "") 'crio arquivo temporário For J = 0 To lista.Count - 1 Using sw As StreamWriter = File.AppendText(Caminho & ".tmp") sw.WriteLine(lista.Item(J)) 'acrescento na lista temporária End Using Next File.Delete(Caminho) 'deleto a listagewm anterior File.Move(Caminho & ".tmp", Caminho) Carrega_lista() Catch ex As Exception MsgBox("Erro ao deletar item da listagem.") End Try End Sub
MARIANO1776
- Sugerido como Resposta Fabio I sexta-feira, 8 de junho de 2018 13:20
- Marcado como Resposta Durval Teixeira sábado, 9 de junho de 2018 03:10
-
Mariano, deste um show de cordialidade, obrigado mesmo. Mudei apenas algumas coisas que já eram do meu uso, como caminho e etc..
Completo, ficou assim:
Imports System.Collections.Generic
Imports System.IO
Public Class form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Carrega_lista()
End Sub
Private Sub Carrega_lista()
Dim lista As New List(Of String)
Dim MySource As New AutoCompleteStringCollection()
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim n As Integer
Using sr As StreamReader = File.OpenText(Caminho) 'Percorre o arquivo para carregar a lista para o AutoComplete
Do While sr.Peek() >= 0
lista.Add(sr.ReadLine)
Loop
End Using
MySource.AddRange(lista.ToArray)
Dim nome As TextBox() = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
For n = 0 To 3
nome(n).AutoCompleteCustomSource = MySource
nome(n).AutoCompleteMode = AutoCompleteMode.Suggest
nome(n).AutoCompleteSource = AutoCompleteSource.CustomSource
Next
End Sub
Private Sub Atualiza_lista(nome As TextBox)
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim lista As New List(Of String)
Using sr As StreamReader = File.OpenText(Caminho)
Do While sr.Peek() >= 0
lista.Add(sr.ReadLine)
Loop
End Using 'carrego a lista atual
If lista.IndexOf(nome.Text) = -1 Then 'verifico se a palavra já não está na lista.
Using sw As StreamWriter = File.AppendText(Caminho)
sw.WriteLine(nome.Text) 'se não estiver, acrescento na lista
End Using
End If
End Sub
Private Sub TextBox_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave, TextBox2.Leave, TextBox3.Leave, TextBox4.Leave
Atualiza_lista(CType(sender, TextBox))
Carrega_lista()
End Sub
Private Sub TextBox_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick, TextBox2.MouseDoubleClick, TextBox3.MouseDoubleClick, TextBox4.MouseDoubleClick
Remove_lista(CType(sender, TextBox))
End Sub
Private Sub Remove_lista(nome As TextBox)
Dim J As Int32
Dim Caminho As String = "C:\Usuarios\Home1\nomes_" & 4 & ".txt"
Dim lista As New List(Of String)
Try
Using sr As StreamReader = File.OpenText(Caminho)
Do While sr.Peek() >= 0
lista.Add(sr.ReadLine)
Loop
End Using 'carrego a lista atual
lista.Remove(nome.Text)
nome.Text = ""
File.AppendAllText(Caminho & ".tmp", "") 'crio arquivo temporário
For J = 0 To lista.Count - 1
Using sw As StreamWriter = File.AppendText(Caminho & ".tmp")
sw.WriteLine(lista.Item(J)) 'acrescento na lista temporária
End Using
Next
File.Delete(Caminho) 'deleto a listagewm anterior
File.Move(Caminho & ".tmp", Caminho)
Carrega_lista()
Catch ex As Exception
MsgBox("Erro ao deletar item da listagem.")
End Try
End Sub
End ClassMuito grato, abraço e obrigado.
Durval
- Marcado como Resposta Durval Teixeira sábado, 9 de junho de 2018 17:03