Ayudaa en C sharp !!! :(

zenito

Bovino maduro
#1
Espero y me puedan ayudar, bueno el punto es:
Estoy haciendo una agenda en c sharp y los contactos los
los almaceno en un ARCHIVO de texto, entonces, me piden 4 opciones
agregar, buscar, editar y eliminar.

Me faltan dos metodos el de editar y el eliminar , haber si me pueden orietar en como EDITAR el archivo ya que es con el que estoy batallando demasiado que ya no se ni que hacer, espero y puedan ayudarmee
GRACIAAAAAAASSS

:chavo:
 

zenito

Bovino maduro
#3
no no io kreo no me di a entender , si es asi una disculpa grunt
eske amm ese kodigo seria algo en sql pienso yo, osea io no stoi manejando base de datos
enlasandome desde c sharp a sql, solo es un sistema de informacion vamos

as de kuenta en c sharp ago el archivo lo abro escribo, leo, la bronka es al momento de editarlo :S


as de kuenta lo kreo i lo kapturo en el si metodo:


public void Capturar()
{
FileStream objFS = new FileStream("Agenda.txt", FileMode.Append, FileAccess.Write);
StreamWriter objSW = new StreamWriter(objFS);
Console.WriteLine("Dame la Fecha");
String fecha = Console.ReadLine();
Console.WriteLine("Dame el Nombre");
String nom = Console.ReadLine();
Console.WriteLine("Dame la Hora");
String hora = Console.ReadLine();
objSW.WriteLine(fecha);
objSW.WriteLine(nom);
objSW.WriteLine(hora);
objSW.Close();
objFS.Close();

}


aora lo kiero editar es lo kee no e podido :S
aber si me ayudan :(
 

Muertoz

Bovino adolescente
#4
Fácil, eliminalo y vuelvelo a crear ñ_ñ (solución rápida y para que entregues tu tarea, pero sin duda no es la mejor)
 
#5
Yo en tu lugar lo que haria es trabajar con la serialización y deserialización de objetos. Es una función bastante robusta y sólida desde el framework 2.0 y no se diga en los posteriores. En el propio msdn verás ejemplos muy prácticos de como serializar y deserializar objetos. Si no tienes restricciones, el caso más sencillo es utilizando XML (en cuestión de unos cuantos minutos podrías tener toda la funcionalidad que deseas)
 

zenito

Bovino maduro
#6
serializar y deserializar? amm la vdd no se ke es esoo :S
ske soy nuevo en esto, pero pues no pierdo nada kon chekarlo y alomejor gano algoo graciaaassssssss
 
#7
Hola, como el buen Muertoz menciona,si forzosamente debes usar el archivo de texto, la opción más facil es sobreescribir el archivo;por ejemplo si deseas modificar a un contacto,primero lo buscas en tu archivo,una vez que si lo haz localizado sobreescribes el archivo con la nueva informacion. Sin embargo yo te recomiendo que uses un gestor de base datos ya sea access,sql,mysql,etc o bien inclusive una simple hoja de excel puede servir.¿Por qué es recomendado? pues bueno un archivo de texto es una serie de caracteres 'planos' lo cual hace un poco mas complicado el analisis de la información aún a pesar de que c# es muy poderoso,por otro lado las BD tambien contienen texto plano pero contenido en registros lo cual ayuda significativamente el analisis y tratamiento de la informacion. Mandame un msj privado y te puedo ayudar para usar BD. Saludos y ojalá logres tu tarea!!
 

nestick_cacc

Bovino maduro
#8
Yo en tu lugar lo que haria es trabajar con la serialización y deserialización de objetos. Es una función bastante robusta y sólida desde el framework 2.0 y no se diga en los posteriores. En el propio msdn verás ejemplos muy prácticos de como serializar y deserializar objetos. Si no tienes restricciones, el caso más sencillo es utilizando XML (en cuestión de unos cuantos minutos podrías tener toda la funcionalidad que deseas)
no marches es mas complejo lo serializacion y tedria que meterse en mas pedos cuando falla algo por x situacion, es buena la idea de serializacion pero si hay que meterse con los eventos del mismo para la integridad del objeto y es mas rollo, y al fin de cuentas el quiere modificar solo archivos de texto y eso son mas faciles

Hola, como el buen Muertoz menciona,si forzosamente debes usar el archivo de texto, la opción más facil es sobreescribir el archivo;por ejemplo si deseas modificar a un contacto,primero lo buscas en tu archivo,una vez que si lo haz localizado sobreescribes el archivo con la nueva informacion. Sin embargo yo te recomiendo que uses un gestor de base datos ya sea access,sql,mysql,etc o bien inclusive una simple hoja de excel puede servir.¿Por qué es recomendado? pues bueno un archivo de texto es una serie de caracteres 'planos' lo cual hace un poco mas complicado el analisis de la información aún a pesar de que c# es muy poderoso,por otro lado las BD tambien contienen texto plano pero contenido en registros lo cual ayuda significativamente el analisis y tratamiento de la informacion. Mandame un msj privado y te puedo ayudar para usar BD. Saludos y ojalá logres tu tarea!!
Este tiene toda la razon, mira una base de datos su principal objetivo es esa almacenar datos y pues un archivo de texto solo es para mostrar texto, si se puede hacer eso pero lamentablemente cualquiera te puede ver la informacion o modificar tu archivo con el simple hecho de abrirlo con un blog de notas y ya valistes por que cuando les un archivo de texto lo que les es una cadena de caracteres, no lees datos, pero de todos modos mira para modificar archivos de textos y leer archivos de textos necesitas una instacia de la clase TextReader y de TextWriter

para modificar un archivo de texto pues primero lo lees con el TextReader y lo almacenas en un string despues modificas el string y sobreescribes el archivo con el TextWriter y para borrarlos solo la instancia de File o FileInfo y el metodo "Delete" y con esto borras cualquier archivo pero en algunas veces si se te pone roñoso el asunto solo dale permisos para modificar archivos y se le quita, sale carnalito suerte con tu proyecto
 

zenito

Bovino maduro
#9
sii, osea lo ke me dicen de ls basoes dedatos esta muy bien pero pss ta no lleamos hay y pues el trabajo soo se limitaa a archvooss, ta no nos konectamos a niuna base de datos si lo aremos pero en el sig modulo i sera sql , ps pa saber ke si me atoro tmb pueden ayudar jejejeje.

entonces chekare eso del textReader y textWriter dejen loa go y aber ke ondas ok, graciassss a todooooooosss, encerioooooooooooooooo !!!
 
#10
Hola entiendo lo que quieres hacer, estoy de acuerdo con todos los demás que el uso de una base de datos es más comodo y fácil, pero como a mi me paso este semestre en la escuela me tope con un maestro que queria que a webo usaramos archivos y pues no es nada complicado ni nada del otro mundo, yo use archivos *.DATA y es casi igual que con los *.text ya que en los primeros te permite guardar datos de cualquier tipo y en los segundos solo texto plano.

Haber si estoy a tiempo de poder echarte una mano, hay te recomiendo que uses un archivo auxiliar, esa forma se me hizo la más fácil. Para la cuestión de editar yo solo hacia una busqueda hasta encontrar la info del registro a modificar y ya despues de hacer la modificación lo que hacia es que vaciaba todos los registros de mi arhivo al auxiliar hasta llegar al punto donde encontraba el que quiero modificar y en lugar de guardar el que quiero modificar guardo la modificación que hice(claro que previamente hice un metodo que me devulve toda la info de ese registro) en variables y unicamente elimine el archivo original (con delete) y de renombre el archivo auxiliar con el nombre del archivo original (move) y listo. Es similar para eliminar solo que en su lugar cuando encuntra el registro a eliminar no lo copia al archivo auxiliar y se pasa con los registros que le siguen. Espero te pueda ayudar dudas mandame un MP.
 

zenito

Bovino maduro
#11
Hola entiendo lo que quieres hacer, estoy de acuerdo con todos los demás que el uso de una base de datos es más comodo y fácil, pero como a mi me paso este semestre en la escuela me tope con un maestro que queria que a webo usaramos archivos y pues no es nada complicado ni nada del otro mundo, yo use archivos *.DATA y es casi igual que con los *.text ya que en los primeros te permite guardar datos de cualquier tipo y en los segundos solo texto plano.

Haber si estoy a tiempo de poder echarte una mano, hay te recomiendo que uses un archivo auxiliar, esa forma se me hizo la más fácil. Para la cuestión de editar yo solo hacia una busqueda hasta encontrar la info del registro a modificar y ya despues de hacer la modificación lo que hacia es que vaciaba todos los registros de mi arhivo al auxiliar hasta llegar al punto donde encontraba el que quiero modificar y en lugar de guardar el que quiero modificar guardo la modificación que hice(claro que previamente hice un metodo que me devulve toda la info de ese registro) en variables y unicamente elimine el archivo original (con delete) y de renombre el archivo auxiliar con el nombre del archivo original (move) y listo. Es similar para eliminar solo que en su lugar cuando encuntra el registro a eliminar no lo copia al archivo auxiliar y se pasa con los registros que le siguen. Espero te pueda ayudar dudas mandame un MP.


Ande caoon komo no nos vimos antees osea si ice algo similar a lo ke me dices pero si ubiera leido esto antes me abria aorradoo oras y oras jhahjajha solo ke si tube usar awebb texto planoo, pero lo ke me describiste kasi lo ise similar , i kon el fileinfo borraba el auxiliar aunke tambien use uno ke io no konocia este mira:


FileInfo
objInfo = new FileInfo("AuxCitas.txt");
objInfo.Replace(
"Citas.txt", "CitasBack.txt");

por ejemplo ese me lo remplaso lo ke teniaa i me lo manda ia kon la modifikacion ke le ise komo dices en el auxiliar

pero diste en el putoooo, muchas gracias a todooooooooooosssssss, e terminado mi pekeño sistema de informacion y lo made ya al profesor muchas graciaaaaasss


a todos los ke me aiudaron

y pues tema resuelto y cerraoooooooooooooo !!!!!!!

gracias brothersssssss
 

zenito

Bovino maduro
#12
perdon me ekibokeee ERROR DE DEDO


pero diste en el puNto, muchas gracias a todooooooooooosssssss, e terminado mi pekeño sistema de informacion y lo made ya al profesor muchas graciaaaaasss



sorryy
 

coloboxp

Bovino adolescente
#14
Yo en tu lugar lo que haria es trabajar con la serialización y deserialización de objetos. Es una función bastante robusta y sólida desde el framework 2.0 y no se diga en los posteriores. En el propio msdn verás ejemplos muy prácticos de como serializar y deserializar objetos. Si no tienes restricciones, el caso más sencillo es utilizando XML (en cuestión de unos cuantos minutos podrías tener toda la funcionalidad que deseas)
Estoy de acuerdo con Sargeras en que la serializacion (convertir un objeto en una serie de bytes para almacenarlo o trasmitirlo por algún medio [red, disco, etc]) podía ser buena opción, sin embargo creo que lo que buscas es tu tener la lógica de como se guardan las cosas... así que te recomendaría crear una clase que se llame Entrada mas o menos así

Código:
public class Entrada
{
            public Entrada()
            {
                   Nombre = string.Empty;
                   Apellidos = string.Empty;
                   // inicializar las demás variables
            }
   
            public string Nombre {get; set;}
            pubilc string Apellidos {get; set;}
            public int Telefono {get;set}
           // otras variables

           public string Exportar()
          {
                   string exportado = string.Empty;

                  exportado += Nombre + "|" + Apellidos + "|" + Telefono "|"; 
                // asi sumas todas las variables
          }

          public void Importar(string registro)
         {
              string[] elementos = registro.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

              Nombre = elementos[0];
              Apellidos = elementos[1];
              Telefono = elementos[2];
              // las demás variables
          }

           public override string ToString()
           {
               return Nombre + " " + Apellidos;
            }
}
Crea un List<Entrada> o BindingList<Entrada> y ahí almacena tus objetos en el de la siguiente manera:

Código:
// Creas la lista
List<Entrada> lista = new List<Entrada>();

// Una instancia de Entrada
Entrada entrada1 = new Entrada();

// Llenas las propiedades
entrada1.Nombre = "Juanito";
entrada1.Apellidos = "Perez";
entrada1.Telefono = 56581111;

lista.Add(entrada1);

Entrada entrada2 = new Entrada();
// igual llenas las propiedades

lista.Add(entrada2);
De esta manera ya tienes dos entradas en la lista y las puedes usar como DataSource en algunos controles de windows como le ListBox.

Código:
lstEntradas.DataSource = lista;
Cuando tengas que guardar a disco lo puedes hacer así:
Código:
// Juntamos todas las entradas en un solo string
string contenidoDelArchivo = string.Empty;
foreach(Entrada ent in lista)
{
       contenidoDelArchivo += ent.Exportar() + Environment.NewLine;
}

//Guardamos en disco
using(StreamWriter sw = new StreamWriter("C:\\agenda.dat", false))
{
    sw.Write(contenidoDelArchivo);
}
Si te fijas, lo que estamos haciendo es delimitar cada registro de tu agenda con un salto de línea (Environment.NewLine)

Ahora para importar o abrir el archivo:
Código:
string contenidoDelArchivo;
using(StreamReader sr = new StreamReader("C:\\agenda.dat"))
{
          contenidoDelArchivo = sr.ReadToEnd();
}

// Creamos una nueva lista
List<Entrada> lista = new List<Entrada>();

// Cargamos los registros
string[] registros = contenidoDelArchivo.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

//Convertimos cada registro en un objeto
foreach(string reg in registros)
{
      Entrada e = new Entrada();
      e.Importar(reg);
      lista.Add(e);
}
Y listo, ya tienes nuevamente tu archivo convertido en objetos.

Si quieres editar alguna entrada de tu agenda, copies los valores de las propiedades a algún control, y que cuando las modifiques le asignes el nuevo valor a dicha entrada, cuando guardes se almacenará el nuevo valor.

Algo muy sencillo que puedes hacer para editar los valores sin desarrollar nada, es que uses el control PropertyGrid y le mandes como parámetro a SelectedObject() la entrada de la lista que quieres ver, ej:

Código:
propertyGrid.SelectedObject(lista[1]);
// puedes llevar un indice controlado por botones para aumentar (avanzar) o disminuir(regresar) el registro actual

Código:
//clic al boton "anterior"
 private void anteriorButton_Click(object sender, EventArgs e)
        {
              //aqui puedes validar si indice-- no es menor que los elementos de tu lista
                indice--;
propertyGrid.SelectedObject(lista[indice]);
        }

//clic al boton "siguiente"
 private void siguienteButton_Click(object sender, EventArgs e)
        {
              //aqui puedes validar si indice++ no excede los elementos de tu lista
               indice++;
propertyGrid.SelectedObject(lista[indice]);
        }
Automágicamente el property grid pintará tus propiedades y te permitirá editarlas en tiempo real.

Saludos.

NOTAS

  • Omití el uso de mejores prácticas, uso del StringBuilder, manejo de exepciones y otras validaciones porque no tienes mucha experiencia y dificilmente creerían que tu lo hiciste si entregaras dicho código.
  • El código lo escribí al vuelo así que puede suceder que no compile, en dado caso trata de validar que las funciones que use estén en Mayúsculas y minúsculas como debieran ser.
  • Necesitas agregar los siguientes namespaces al inicio de tu clase:
    • using System.Collections.Generic;
    • using System.IO;
Espero que todavía te sirva, saludos.
 
Arriba