none
Quais comandos devo usar para deletar uma linha num arquivo texto? RRS feed

  • 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() >= 0

                    If 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 Using

    Grato/Durval


    quarta-feira, 6 de junho de 2018 05:51

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
    sexta-feira, 8 de junho de 2018 12:46
  • 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 Class

    Muito grato, abraço e obrigado.

    Durval

    sábado, 9 de junho de 2018 03:10

Todas as Respostas

  • Durval Teixeira,

          Por favor, veja se te ajuda:

    Public Sub LimparStrComando(ByRef sb As StringBuilder)

       If Not sb Is Nothing Then
           sb.Remove(0, sb.Length)
       End If

    End Sub


    []'s,
    Fabio I.

    • Editado Fabio I quarta-feira, 6 de junho de 2018 12:45
    quarta-feira, 6 de junho de 2018 12:43
  • Fabio, grato por tua resposta. Poderia me dar mais alguma orientação sobre como usar essa tua dica na minha  rotina acima? Ainda estou meio perdido quanto a como fazer uso dela.

    Abraço/Durval

    quinta-feira, 7 de junho de 2018 03:50
  • 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

    quinta-feira, 7 de junho de 2018 17:27
  • 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 .txt
    Gooden
    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
    quinta-feira, 7 de junho de 2018 19:16
  • Brigadão por enquanto Fabio. Vou tentar ver o que eu consigo com teu código também.

    Grato/Durval

    quinta-feira, 7 de junho de 2018 22:47
  • 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
    sexta-feira, 8 de junho de 2018 12:46
  • 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 Class

    Muito grato, abraço e obrigado.

    Durval

    sábado, 9 de junho de 2018 03:10