Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .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:


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.




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#)

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 (csharp) [Seleccionar]

class Agenda
   {
       // Supongamos que este es el archivo de texto, separado en lineas
       string[] texto = { "PEPITO;45879684;", "JUAN;42369851;", "JOSE;47896523;" };
       Hashtable agenda = new Hashtable(); // Agenda en memoria

       public bool LeerArchivo()
       {
           if (File.Exists("agenda.txt")) {
               StreamReader sr = File.OpenText("agenda.txt");
               string linea = "";
               int medio = 0;
               while (!sr.EndOfStream)
               {
                   linea = sr.ReadLine();
                   medio = linea.IndexOf(";")
                   agenda.Add(linea.Substring(0, medio), linea.Substring(medio, linea.LastIndexOf(";", medio) - 1))
               }
               return true;
           } else
               return false;
       }
       public void LeerArray()
       {
           int medio = 0;
           foreach (string s in texto)
           {
               medio = s.IndexOf(";")
               agenda.Add(s.Substring(0, medio), s.Substring(medio, s.LastIndexOf(";", medio) - 1))
           }
       }
       public void Modificar(string nombre, string nuevoTelefono) {
           agenda[nombre] = nuevoTelefono;
       }
       public void GuardarArchivo()
       {
           StreamWriter sw = File.CreateText("archivo.txt");
           foreach (string nombre in agenda)
               sw.WriteLine(nombre + ";" + agenda[nombre] + ";");
           sw.Flush();
           sw.Close();
       }
   }



EDIT:

Cita de: 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
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
Cita de: monal en 12 Noviembre 2013, 05:38 AMPodrias 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!