Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: nico56 en 6 Enero 2010, 15:48 pm



Título: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: nico56 en 6 Enero 2010, 15:48 pm
Hola que tal, tengo un archivo de texto con una lista de personas y sus telefonos, por ejemplo asi:

Código:
PEPITO;45879684;
JUAN;42369851;
JOSE;47896523;


Y tengo que hacer una funcion que reciba en un parametro el nombre de la persona, y en otro un nuevo telefono que lo debe reemplazar en el archivo.


Código:

public void modificar_telefono(string nombre,string telefono)
{
      FileStream fs = new FileStream("cheques.txt", FileMode.Open);
      StreamReader sr = new StreamReader(fs);
      char[] x ={ ';' }; // delimitador

       string[] campos= sr.ReadLine().Split(x);

       while(!sr.EndOfStream)
       {
                if( campos[0] == nombre )
                         //aca deberia poner la instruccion para modifcar la linea

               campos= sr.ReadLine().Split(x);
        }

         fs.Close();
         sr.Close();


}


He probado creando un nuevo archivo, copiando todo hasta encontrar la linea y seguir copiando pero me parece una forma muy chota de hacerlo.

Desde ya gracias y saludos.


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: ABDERRAMAH en 6 Enero 2010, 15:54 pm
Esto lo cito de http://www.elguille.info/colabora/NET2005/svalsse_leyendo_y_escribiendo_archivos.htm :

Citar
Leyendo desde un archivo usando BufferedStream

using System;
using System.Text;
using System.IO;

static void Main(string[] args)
{
    string path = "c:\\sample\\sample.xml";
    Stream instream = File.OpenRead(path);

    // crear buffer para abrir stream
    BufferedStream bufin = new BufferedStream(instream);
    byte[] bytes = new byte[128];

    // leer los primeros 128 bytes del archivo
    bufin.Read(bytes, 0, 128);
    Console.WriteLine("Allocated bytes: "+Encoding.ASCII.GetString(bytes));
}

Leyendo desde un archivo de texto

using System;
using System.IO;

static void Main(string[] args)
{
    string fileName = "temp.txt";
    FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    StreamReader reader = new StreamReader(stream);

    while (reader.Peek() > -1) Console.WriteLine(reader.ReadLine());
    reader.Close();
}

Escribiendo en un archive de texto

using System;
using System.IO;

static void Main(string[] args)
{
    string fileName = "temp.txt";
    FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
    StreamWriter writer = new StreamWriter(stream);

    writer.WriteLine("Esta es la primera línea del archivo.");
    writer.Close();
}

Creando un archivo y escribiendo en este

Este ejemplo usa el método CreateText() el cual crea un Nuevo archive y retorna un objeto StreamWriter que escribe a un archivo usando formato UTF-8.

using System;
using System.IO;

static void Main(string[] args)
{
    string fileName = "temp.txt";
    StreamWriter writer = File.CreateText(fileName);

    writer.WriteLine("Este es mi Nuevo archivo creado.");
    writer.Close();
}

Insertando texto en un archivo

using System;
using System.IO;

static void Main(string[] args)
{
    try
    {
        string fileName = "temp.txt";
        // esto inserta texto en un archivo existente, si el archivo no existe lo crea
        StreamWriter writer = File.AppendText(fileName);
        writer.WriteLine("Este es el texto adicionado.");
        writer.Close();
    }
    catch
    {
        Console.WriteLine("Error");
    }
}


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: Shell Root en 6 Enero 2010, 16:33 pm
Porque no usas Base de Datos? Tansiquiera Access, es mucho más comodo... ;)


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: nico56 en 6 Enero 2010, 17:18 pm
No es mucho una base de datos para eso? Es una aplicacion muy simple :S. La idea era reemplazar una linea del archivo de texto :S


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: ABDERRAMAH en 6 Enero 2010, 17:24 pm
Si sólo es un simple listín telefónico sería desaprobechar recursos una db, ¿no?


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: nico56 en 6 Enero 2010, 17:33 pm
Mas haya que valga la pena o no usar una base de datos, como puedo modificar una linea de un archivo de texto con c# ? :S


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: ABDERRAMAH en 6 Enero 2010, 17:42 pm
El problema es mi nivel de C#, que es muy básico, lo que no se hacer y ahora no tengo tiempo de mirar es cómo concatenar strings, yo en vb lo haría así:

writer.writeline(cstr(nombre&";"&telefono&";"))

en un algoritmo como el tuyo sería así (aunque ya te digo que la concatenación de nombre+;+telefono+; no está bien hecha en codigo c#)

Código:
public void modificar_telefono(string nombre,string telefono)
 {
      FileStream fs = new FileStream("cheques.txt", FileMode.Open);
      StreamReader sr = new StreamReader(fs);
      char[] x ={ ';' }; // delimitador
      string[] campos= sr.ReadLine().Split(x);
      string fileName = "cheques.txt";

       while(!sr.EndOfStream)
       {
                if( campos[0] == nombre )
                         //aca deberia poner la instruccion para modifcar la linea
 {
      
       // esto inserta texto en un archivo existente, si el archivo no existe lo crea
       StreamWriter writer = File.AppendText(fileName);
       writer.WriteLine(nombre+x+telefono+x);   //abderramah-YO NO SE HACER CONCATENACIONES EN C# x es un char, ¿se puede concatenar a un string?
       writer.Close();
     }
               campos= sr.ReadLine().Split(x);
        }
         fs.Close();
         sr.Close();
 }

examina esto, tiene fallos porque yo lo que programo no es C#, mira la linea donde se escribe y concatena bien las variables a ver si te va.


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: raul338 en 6 Enero 2010, 17:45 pm
No se si sea conveniente modificar la linea solamente, lo mejor (para mi) (sin usar base de datos) es que pases todo a un hashtable o lista, y desde ahi lo modificas  y lo guardas todo en uno, puede ser mas largo, pero seria mejor que recorrer toda una linea y sobreescribirla, ademas, se puede hacer eso?? xD (capaz usando Peek y Write)


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: [D4N93R] en 6 Enero 2010, 19:14 pm
Yo creo que es mejor serializar una colección de una clase tuya :) es más fácil, y menos líneas!


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: nico56 en 6 Enero 2010, 19:28 pm
Como lo serializo, busque información de eso pero no entiendo nada :S


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: MANULOMM en 6 Enero 2010, 19:59 pm
utiliza un archivo XML u utilizas todos los controles y clases de acceso a datos, asi te evitaras problemas y sera como una base de datos.

Un DataSet Tipado, creas la tabla con la estrucutra y lo guardas con un metodo que tiene el dataset.
WriteToXML(string File) creo que es ese.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: raul338 en 6 Enero 2010, 20:05 pm
Mira este codigo, tal vez te sirva, no es la forma mas efectiva de hacer lo que te dije, y ademas, le faltan metodos
Quise probar el visual studio 2010 pero me anda re lento asi que .... no es mi mejor intento ;-)

Código
  1. class Agenda
  2.    {
  3.        // Supongamos que este es el archivo de texto, separado en lineas
  4.        string[] texto = { "PEPITO;45879684;", "JUAN;42369851;", "JOSE;47896523;" };
  5.        Hashtable agenda = new Hashtable(); // Agenda en memoria
  6.  
  7.        public bool LeerArchivo()
  8.        {
  9.            if (File.Exists("agenda.txt")) {
  10.                StreamReader sr = File.OpenText("agenda.txt");
  11.                string linea = "";
  12.                int medio = 0;
  13.                while (!sr.EndOfStream)
  14.                {
  15.                    linea = sr.ReadLine();
  16.                    medio = linea.IndexOf(";")
  17.                    agenda.Add(linea.Substring(0, medio), linea.Substring(medio, linea.LastIndexOf(";", medio) - 1))
  18.                }
  19.                return true;
  20.            } else
  21.                return false;
  22.        }
  23.        public void LeerArray()
  24.        {
  25.            int medio = 0;
  26.            foreach (string s in texto)
  27.            {
  28.                medio = s.IndexOf(";")
  29.                agenda.Add(s.Substring(0, medio), s.Substring(medio, s.LastIndexOf(";", medio) - 1))
  30.            }
  31.        }
  32.        public void Modificar(string nombre, string nuevoTelefono) {
  33.            agenda[nombre] = nuevoTelefono;
  34.        }
  35.        public void GuardarArchivo()
  36.        {
  37.            StreamWriter sw = File.CreateText("archivo.txt");
  38.            foreach (string nombre in agenda)
  39.                sw.WriteLine(nombre + ";" + agenda[nombre] + ";");
  40.            sw.Flush();
  41.            sw.Close();
  42.        }
  43.    }
  44.  


EDIT:

utiliza un archivo XML u utilizas todos los controles y clases de acceso a datos, asi te evitaras problemas y sera como una base de datos.

Un DataSet Tipado, creas la tabla con la estrucutra y lo guardas con un metodo que tiene el dataset.
WriteToXML(string File) creo que es ese.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
Tambien es otra buena opcion, hay miles de formas de resolver tu problema  ;D ya sea "a mano"  o con clases del .net


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: seba123neo en 7 Enero 2010, 01:15 am
Hola, usa archivos de acceso aleatorio para hacer eso.aca tenes un ejemplo:

VB.NET Solution for working with random files (http://www.codeproject.com/KB/files/ybrandomfile.aspx)

tenes una estructura UDT y volcas todos esos datos al archivo.

casi todas las agendas simples estan realizadas asi.

saludos.


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: nico56 en 8 Enero 2010, 14:07 pm
HOla de vuelta, gracias por las respuestas, al final lo pude hacer andar, lo que hice fue leer el archivo y montar todo en una lista, modificaba lo que queria, creaba un archivo temporal con el contenido de la lista y reemplazaba el temporal por el orginal.


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: monal en 12 Noviembre 2013, 05:38 am
Podrias mandarme el codigo que utilzaste?:D


Título: Re: Modificar el contenido de una linea de un archivo de texto en c#
Publicado por: Eleкtro en 12 Noviembre 2013, 07:21 am
Podrias mandarme el codigo que utilzaste?:D

¿Podrías leer las normas?.

Has revivido un tema de hace 3 años para formular una pregunta irrelevante a alguien que ni siquiera va a leer tu mensaje.

Citar
Última vez activo:    12 Septiembre 2010, 00:57

Fíjense un poco mejor en los detalles importantes.

PD: La manipulación de texto es algo muy sencillo, en Google y en el buscador del foro encontrarás cientos de ejemplos, y aquí encontrarás algún que otro código de ayuda el cual puedes convertir online a C#: http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html

Si sigues teniendo dudas, formula una pregunta en un nuevo post.

Cierro el tema,
saludos!