Los archivos de texto siguen siendo de mucha utilidad (como comentaba en mi post anterior sobre archivos txt en C++). Pero son aún más útiles si con CSV (para una explicación completa sobre archivos CSV, haz clic aquí). Y en este post te voy a platicar cómo crearlos en C#.
En resumidas cuentas, un archivo CSV es un archivo de texto que contiene datos los cuales están separados con comas (por eso CSV, comma separated values). Son muy útiles porque se abren de forma nativa en Excel y desde allí puedes hacer mil cosas con los datos).
Para escribir en un archivo de texto, necesitamos objetos de las clases StreamWriter (para escribir al archivo) y StreamReader (para leer datos).
Para este ejemplo, hice un nuevo proyecto Aplicación de Windows Forms (.NET Framework) e hice la siguiente interfaz:
En esta ventana voy a pedir nombre, edad y semestre en cajas de texto, selecciona un tipo de bachillerato de un combobox. Abajo hay una lista donde voy a poner los alumnos registrados. Los botones tienen las siguientes funciones: agregar el alumno (sus datos están en las cajas de texto y combobox) a la lista. Otro botón va a eliminar todo lo que está en la lista. Otro botón guarda lo que está en la lista al archivo, mientras que otro lee del archivo y pone en la lista los datos tal y como están guardados. Y al final un botón para salir del programa.
Me voy a enfocar en el código que manipula el archivo (escribir datos en él y leer datos de él). Al final pongo el código completo.
Éste es el método que se encarga de guardar todo lo que está en la lista al archivo:
/// <summary>/// Guarda lo que está en el stringbuilder a un archivo/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtnGuardar_Click(objectsender,EventArgse){// Creo el StreamWriter y abro el archivo para escrituraStreamWriterstreamWriter=newStreamWriter("miarchivo.csv");// Escribo todo lo del StringBuilder al archivofor(inti=0;i<lstAlumnos.Items.Count;i++){streamWriter.WriteLine(lstAlumnos.Items[i].ToString());}// Cierro el archivostreamWriter.Close();}
Aquí estamos abriendo el archivo para escritura en un objeto llamado streamWriter (que es de la clase StreamWriter). El constructor de StreamWriter abre el archivo y se encarga de todo lo necesario. Luego hay un ciclo que va por todos los elementos de la lista, escribiendo línea por línea al archivo. Al final cierras el archivo y todos contentos.
Este es el método para leer línea por línea del archivo y ponerlo en la lista. Éste es el código:
/// <summary>/// Elimina todo de la lista, lee el archivo línea por línea y lo va agregando a la/// lista./// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtnLeer_Click(objectsender,EventArgse){// Elimino todo en la listalstAlumnos.Items.Clear();// Abro archivo para lecturaStreamReaderstreamReader=newStreamReader("miarchivo.csv");// Voy por todos los registros, leyendo una línea y agregándolo a la lista// Mientras no llego al final del archivo...while(!streamReader.EndOfStream){// Leo una línea del archivostringlinea=streamReader.ReadLine();// Agrego esta línea a la listalstAlumnos.Items.Add(linea);}// Cierro el archivostreamReader.Close();}
Empiezo eliminando todos los elementos de la lista. Luego creo el objeto StreamReader (y al crearlo abre el archivo). Con el archivo abierto, tengo un ciclo que lee línea por línea (EndOfStream me dice si llegué al final del archivo y el ReadLine lee toda una línea y devuelve un string con lo que leí). Y esa cadena lo agrego a la lista. Al terminar el ciclo, cierro el archivo y ya.
Aquí les pongo el código de toda la ventana, esperando que sea de utilidad:
usingSystem;usingSystem.IO;usingSystem.Windows.Forms;namespaceArchivosCSV{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}/// <summary>/// Pregunta si desea salir y termina la ejecución del programa/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtnSalir_Click(objectsender,EventArgse){if(MessageBox.Show("¿Desea salir?","CSV",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes){Application.Exit();}}/// <summary>/// Agrega los datos a un StringBuilder/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtnAgregar_Click(objectsender,EventArgse){// Creo la cadena con todos los valores separados por comasstringlinea=txtNombre.Text+","+txtEdad.Text+","+txtSemestre.Text+","+cboBach.Items[cboBach.SelectedIndex];// A la listbox le agrego esa línealstAlumnos.Items.Add(linea);// Dejo en blanco todos los campostxtEdad.Text="";txtNombre.Text="";txtSemestre.Text="";cboBach.SelectedIndex=0;}// Elimina todos los elementos de la lista y del stringbuilderprivatevoidbtnLimpiar_Click(objectsender,EventArgse){// Elimino todo lo de la listalstAlumnos.Items.Clear();}/// <summary>/// Selecciona el primer elemento del combobox/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidForm1_Load(objectsender,EventArgse){cboBach.SelectedIndex=0;}/// <summary>/// Guarda lo que está en el stringbuilder a un archivo/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtnGuardar_Click(objectsender,EventArgse){// Creo el StreamWriter y abro el archivo para escrituraStreamWriterstreamWriter=newStreamWriter("miarchivo.csv");// Escribo todo lo del StringBuilder al archivofor(inti=0;i<lstAlumnos.Items.Count;i++){streamWriter.WriteLine(lstAlumnos.Items[i].ToString());}// Cierro el archivostreamWriter.Close();}/// <summary>/// Elimina todo de la lista, lee el archivo línea por línea y lo va agregando a la/// lista./// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidbtnLeer_Click(objectsender,EventArgse){// Elimino todo en la listalstAlumnos.Items.Clear();// Abro archivo para lecturaStreamReaderstreamReader=newStreamReader("miarchivo.csv");// Voy por todos los registros, leyendo una línea y agregándolo a la lista// Mientras no llego al final del archivo...while(!streamReader.EndOfStream){// Leo una línea del archivostringlinea=streamReader.ReadLine();// Agrego esta línea a la listalstAlumnos.Items.Add(linea);}// Cierro el archivostreamReader.Close();}}}
Espero que les haya sido de utilidad. ¡Hasta la próxima!
No hay comentarios.:
Publicar un comentario