none
Txt borrar la linea que uno quiere

    Pregunta

  • Tengo una pregunta amigos espero me puedan ayudar :) he estado buscando el poder eliminar  la primera linea de un archivo txt, el cual tiene 10 lineas, deseo eliminar la primera linea. tambien borrar alguna otra intermedia por ejemplo la 5 para ver la diferencia entre eliminar la 1 y la 5, asi poder estudiar el codigo, no encontrado en internet alguna ayuda en concreto detallando lo que busco, bueno al igual no entiendo mucho, saludos espero alguien me pueda ayudar, saluditos.

    Este codigo utilizo para la lectura de primer dato, busco como eliminar algun ejemplo uno eliminando la linea 1 y otro la 5, y si me puede ayudar a leer la 1 y 5 en unas label.

            Dim freader As New StreamReader("D:\DATOS\agenda.txt")
            Dim contenido As String
    
            contenido = freader.ReadLine()
            Label1.Text = contenido
    
            freader.Close()


    viernes, 14 de octubre de 2016 4:16

Respuestas

  • No la verdad no puede encontrale pies ni forma, ni donde poner la ruta ni acomodarlo, aun teniendo peras y manzanas :(

    Tania,

    Debes analizar el código y estudiar cada función, propiedad o clase, es la única manera de aprender. Lo que propuse en el ejemplo es lanzar una ventana para buscar el archivo que contiene las líneas, si tu no quieres darte al trabajo de buscar el archivo entonces escribe la ruta "en duro" como argumento de la función ReadAllLines().

    Además, lo que hace el código es borrar una o varias lineas del archivo y por eso implemente la matriz unidimensional 'indicesEliminar' para contener los índices a borrar, pero si sólo quieres borrar una línea entonces vamos a poner el código más simple:

    Dim RutaArchivo As String = "D:\Lineas.txt"
    Dim IndiceBorrar As Integer = 2
    
    Dim lineas As String() = File.ReadAllLines(RutaArchivo, Encoding.[UTF8])
    
    lineas = lineas.Where(Function(x) x <> lineas(IndiceBorrar)).ToArray()
    
    File.WriteAllLines(RutaArchivo, lineas)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 14 de octubre de 2016 21:33
  • Tania_aprendiendo,

    Efectivamente, la solución propuesta hace uso de LinQ que no está soportado en la versión de .NET Framework que ocupas, por tanto echaremos mano a algo convencional.

    Private Sub Button1_Click(ByVal sender As ...
    	Dim RutaArchivo As String = "C:\contador.txt"
    	Dim IndiceBorrar As Integer = 0
    	
    	Dim lineas = File.ReadAllLines(RutaArchivo, Encoding.[UTF8]).ToList()
    	lineas.RemoveAt(IndiceBorrar)
    	File.WriteAllLines(RutaArchivo, lineas)
    End Sub

    Entiendo que lo propuesto funcionará sin problemas en la versión 2.0 de .NET Framework


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 17 de octubre de 2016 6:40

Todas las respuestas

  • Tania_aprendiendo,

    Una forma es utilizando la función 'ReadAllLines()' que permite abrir el archivo y leer todas las líneas, de hecho la función retorna una matriz de cadenas conteniendo las líneas del archivo.

    Por ejemplo, tenemos una archivo con seis líneas:

    Primera línea
    Segunda línea
    Tercera línea
    Cuarta línea
    Quinta línea
    Sexta línea

    El código para leer las líneas y eliminar una -o mas de una- es el siguiente:

    Private Sub btnLeerTxt_Click(sender As Object, e As EventArgs)
    	Dim ofd As New OpenFileDialog()
    
    	If ofd.ShowDialog() = DialogResult.OK Then
    		'Se escriben las líneas del archivo a un array
    		Dim lineas As String() = File.ReadAllLines(ofd.FileName, Encoding.[UTF8])
    		'Se definen los índices que se desean eliminar (filas)
    		Dim indicesEliminar As Integer() = {0, 2} 'Por ejemplo la primera y tercera fila
    		'Se seleccionan los elementos que no son iguales a los indices a eliminar
    		lineas = lineas.Where(Function(x, i) Not indicesEliminar.Contains(i)).ToArray()
    		'Se escribe el archivo
    		File.WriteAllLines(ofd.FileName, lineas)
    	End If
    End Sub

    El resultado sería el siguiente (donde claramente se nota que la primera y tercera línea han sido eliminados del array): 

    Para asignar el valor de una línea del archivo a una etiqueta (objeto Label) bastará con indicar el número de índice de la línea, por ejemplo:

    'Asigna el valor de la segunda línea
    label1.Text = lineas(1)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 14 de octubre de 2016 5:54
  • No la verdad no puede encontrale pies ni forma, ni donde poner la ruta ni acomodarlo, aun teniendo peras y manzanas :(
    viernes, 14 de octubre de 2016 21:19
  • No la verdad no puede encontrale pies ni forma, ni donde poner la ruta ni acomodarlo, aun teniendo peras y manzanas :(

    Tania,

    Debes analizar el código y estudiar cada función, propiedad o clase, es la única manera de aprender. Lo que propuse en el ejemplo es lanzar una ventana para buscar el archivo que contiene las líneas, si tu no quieres darte al trabajo de buscar el archivo entonces escribe la ruta "en duro" como argumento de la función ReadAllLines().

    Además, lo que hace el código es borrar una o varias lineas del archivo y por eso implemente la matriz unidimensional 'indicesEliminar' para contener los índices a borrar, pero si sólo quieres borrar una línea entonces vamos a poner el código más simple:

    Dim RutaArchivo As String = "D:\Lineas.txt"
    Dim IndiceBorrar As Integer = 2
    
    Dim lineas As String() = File.ReadAllLines(RutaArchivo, Encoding.[UTF8])
    
    lineas = lineas.Where(Function(x) x <> lineas(IndiceBorrar)).ToArray()
    
    File.WriteAllLines(RutaArchivo, lineas)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 14 de octubre de 2016 21:33
  • Si poco le entiendo repasare mas
    viernes, 14 de octubre de 2016 23:34
  • Si poco le entiendo repasare mas

    Sería recomendable que menciones la(s) instrucción(es) que no entiendes para proporcionarte la ayuda necesaria:

    Dim lineas As String() = File.ReadAllLines(RutaArchivo)

    Utilizo la función ReadAllLines() para abrir el archivo y recuperar todas las líneas (del archivo), la función retorna una matriz de cadenas que lo utilizaremos convenientemente para nuestro caso, es decir, si tuvieses un archivo de 5 líneas la variable 'lineas' las almacena de la siguiente manera:

    Primera línea ---> (Indice 0)
    Segunda línea ---> (Indice 1)
    Tercera línea ---> (Indice 2)
    Cuarta línea ---> (Indice 3)
    Quinta línea ---> (Indice 4)

    Por tanto, en caso desees asignar el contenido de la segunda línea al objeto Label1 bastará con leer el contenido en el índice correspondiente:

    Label1.Text = lineas(1)

    lineas = lineas.Where(Function(x) x <> lineas(1)).ToArray()

    La segunda instrucción selecciona únicamente los elementos de la matriz que sean distintos al que deseo borrar, una vez recuperado el resultado creo una matriz a partir del objeto.

    La tercera instrucción graba la matriz de cadenas en el archivo.



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 15 de octubre de 2016 2:41
  • Si ya lo repase y vi mi error el cual estoy programando en net fra framework 2.0, para hacer el programa para un windows de bajos recursos, me puedes ayudar a la conversión :)

    Imports System.IO
    Imports System.Text
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim RutaArchivo As String = "C:\contador.txt"
            Dim IndiceBorrar As Integer = 0
    
            Dim lineas As String() = File.ReadAllLines(RutaArchivo, Encoding.[UTF8])
    
            lineas = lineas.Where(Function(x) x <> lineas(IndiceBorrar)).ToArray()
    
            File.WriteAllLines(RutaArchivo, lineas)
        End Sub
    End Class


    lunes, 17 de octubre de 2016 4:29
  • Tania_aprendiendo,

    Efectivamente, la solución propuesta hace uso de LinQ que no está soportado en la versión de .NET Framework que ocupas, por tanto echaremos mano a algo convencional.

    Private Sub Button1_Click(ByVal sender As ...
    	Dim RutaArchivo As String = "C:\contador.txt"
    	Dim IndiceBorrar As Integer = 0
    	
    	Dim lineas = File.ReadAllLines(RutaArchivo, Encoding.[UTF8]).ToList()
    	lineas.RemoveAt(IndiceBorrar)
    	File.WriteAllLines(RutaArchivo, lineas)
    End Sub

    Entiendo que lo propuesto funcionará sin problemas en la versión 2.0 de .NET Framework


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 17 de octubre de 2016 6:40