Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Ciclo I-2020 Universidad de El Salvador Facultad de Ingeniería y Arquitectura Escuela de Ingeniería de Sistemas Informáticos Introducción a la Informática Guía No.2 De LABORATORIO Persistencia de datos Programación C# - Persistencia de datos. Introducción Esta guía consta de dos partes. En la primera parte se desarrollan ejercicios completos en los cuales se aplica una serie de ejemplos sobre escritura y lectura de archivos de texto en C#; la segunda parte trata sobre un ejercicio propuesto que el estudiante desarrollará como actividad evaluada de laboratorio el cual serán entregado en el aula virtual en la fecha correspondiente que se especifica en este documento. Objetivo General: Adquirir el conocimiento haciendo uso de medios persistentes de almacenamiento en archivos de texto, con el objetivo de poder almacenar o extraer datos, todo esto auxiliándose de la herramienta para desarrollo de aplicaciones IDE Visual Studio 2015 para codificar la solución a los ejercicios evaluados en lenguaje C#. Objetivos Específicos: ● Identificar los diferentes tipos de persistencia de datos que se emplean en el desarrollo de los sistemas. ● Conocer y utilizar los distintos tipos de objetos que son necesarios para la implementación de la persistencia en C# para lectura y escritura de datos en archivos de texto. ● Programación de algoritmos en C# que implementen soluciones utilizando archivos de texto. Equipo, Materiales y Herramientas: ● Computadora Personal con Windows. ● Conexión a Internet para entregar la actividad. ● Visual Studio 2015 Community Edition. Metodología. El estudiante DEBE desarrollar un ejercicio planteado en la Parte II. Además, usted como estudiante podrá consultarle a su tutor alguna duda que tenga con respecto al laboratorio 2. Parte I. Persistencia Ejercicios de ejemplo. Para poder comenzar con los ejercicios de ejemplo veremos un poco de teoría sobre la persistencia de datos. • En informática, la persistencia se refiere a la propiedad de los datos para que estos sobrevivan de alguna manera. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 2 • En programación, la persistencia es la acción de preservar la información de un objeto de forma permanente (guardado), pero a su vez también se refiere a poder recuperar la información del mismo (leerlo) para que pueda ser nuevamente utilizado. Existen diferentes tipos de medios persistentes de datos como, por ejemplo: las bases de datos, los archivos de texto plano, archivos de valores separados por coma (CSV), archivos XML. En esta asignatura veremos cómo almacenar datos en archivos de texto plano, pero es importante también conocer en qué consisten los otros tipos de medios persistentes de datos. Bases de datos Se le llama base de datos a los bancos de información que contienen datos relativos a diversas temáticas y categorizados de distinta manera, pero que comparten entre sí algún tipo de vínculo o relación que busca ordenarlos y clasificarlos en conjunto. Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. Estas se utilizan para que la información de un programa pueda ser almacenada, para posteriormente pueda ser modificada, consultada o eliminada. Archivos de texto plano Los archivos de texto plano (plain text), son aquellos formados exclusivamente por texto (sólo caracteres), sin ningún formato; es decir, no requieren ser interpretados para leerse (aunque pueden ser procesados en algunos casos). También son llamados archivos de texto llano, simple o sin formato. En otras palabras, son archivos que contienen solo texto, pero no hay información sobre el tipo de letra, ni formas (negrita, subrayados...), ni tamaños, la extensión de los archivos de texto plano es txt. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 3 Archivos CSV Los archivos CSV (del inglés comma-separated values) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal: Argentina, Brasil...) y las filas por saltos de línea. Los campos que contengan una coma, un salto de línea o una comilla doble deben ser encerrados entre comillas dobles. El formato CSV es muy sencillo y no indica un juego de caracteres concreto, ni cómo van situados los bytes, ni el formato para el salto de línea. Estos puntos deben indicarse muchas veces al abrir el archivo, por ejemplo, con una hoja de cálculo. Archivos XML XML, siglas en inglés de eXtensible Markup Language ("lenguaje de marcas Extensible"), es un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible. Proviene del lenguaje SGML (Standard Generalized Markup Language o "Lenguaje de Marcado Generalizado Estándar") y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML) para estructurar documentos grandes. A diferencia de otros lenguajes, XML da soporte a bases de datos, siendo útil cuando varias aplicaciones deben comunicarse entre sí o integrar información. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 4 Ejemplos haciendo uso de todo el proceso solucionador de problemas Ejemplo 1 archivos de texto plano: Se requiere crear un programa en C# que permita escribir cadenas de texto completas en un archivo de texto plano, además de ello que permita leer los datos almacenados previamente en dicho archivo, dicho programa deberá presentar un menú con las opciones deseadas. Diseño de la solución. 1. Planteamiento general del problema (Método de la caja negra). 2. Definición de variables de entrada. Nombre Tipo Descripción Op Entero Nos permite seleccionar una opción del menú, 1 para escribir en archivo y 2 para leer archivo. Texto String Esta variable la usaremos para capturar el texto que el usuario digite. Escribir en archivo Leer datos desde archivo ENTRADAS Op Texto SALIDAS Almacenar texto en archivo. Lectura de contenido de archivo. PROCESO UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 5 3. Restricciones. Para la variable Op los valores validos son 1 y 2, 1 para escribir en archivo y 2 para leer desde archivo. 4. Proceso Cuando el usuario ejecute el programa, aparecerá un menú con dos opciones, Digite 1 para crear y escribir sobre un archivo y Digite 2 para leer el texto en el archivo creado, si el usuario selecciona la opción 1 se le presentará un mensaje solicitándole que digite el texto a almacenar en el archivo y luego presione Enter, ese texto se almacenará en el archivo llamado Archivo.txt, si el usuario selecciona la opción 2 el programa hará una lectura del contenido del archivo de texto Archivo.txt línea por línea mediante un ciclo repetitivo e imprimirá en pantalla dicho contenido, el ciclo repetitivo se detendrá cuando llegue al final del archivo es decir cuando el dato en la línea sea null o vacio. 5. Variables de proceso Definición de variables de proceso. Nombre Tipo Descripción EscribirArchivo StreamWriter Esta variablees la que permite escribir en el archivo de texto LeerArchivo StreamReader Esta variable es la que permite leer el contenido del archivo de texto. 6. Algoritmo narrado. Proceso: AlmacenarMensaje {EL programa nos permitirá almacenar en un archivo un mensaje de texto en un archivo de texto plano y además de ello permitirá leer el contenido de dicho archivo de texto} {LecturaArchivo y EscrituraArchivo son variables de tipo StreamReader y StreamWriter Respectivamente} {Op es variable de tipo Entero} {Texto es variable de tipo String} 1. Imprimir “----------------------MENU----------------------” 2. Imprimir “Digite 1 para crear y escribir sobre un archivo.” 3. Imprimir “Digite 2 para leer el texto en el archivo creado.” 4. Imprimir “Escriba su selección: ” 5. Leer Op 3. Si Op == 1 entonces a. Hacer EscrituraArchivo = new StreamWriter(“Archivo.txt”) b. Imprimir “Digite el texto a almacenar en el archivo y presione Enter” UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 6 c. Leer Texto d. Escribimos en el archivo el contenido leído de la variable Texto e. Imprimir “Escritura en archivo exitosa.” f. Cerramos la conexión con el archivo de texto. 4. Sino a. Hacer LecturaArchivo = new StreamReader(“Archivo.txt”) b. Imprimir “Texto almacenado en el archivo” c. Imprimir “------------------------------” d. Mientras (línea actual del archivo de texto es diferente de vacío) i. Asignamos a la variable Texto el contenido de la línea actual en el archivo ii. Imprimir Texto iii. Nos movemos a la línea siguiente en el archivo e. Fin mientras de paso d f. Imprimir “Fin mensaje en el archivo” g. Cerramos la conexión con el archivo de texto. 5 {Fin del condicional del paso 3} Sintaxis en C# del ejercicio 1 using System; using System.IO; namespace Persistencia1_Mensaje { class Program { static StreamReader LeerArchivo; static StreamWriter EscribirArchivo; static void Main(string[] args) { //La siguiente línea le establece el título a la ventana de consola Console.Title = "Primer ejemplo de persistencia en C#"; int Op; String Texto; Console.WriteLine("----------------------MENU----------------------"); Console.WriteLine("Digite 1 para crear y escribir sobre un archivo."); Console.WriteLine("Digite 2 para leer el texto en el archivo creado."); Console.WriteLine("------------------------------------------------"); Console.WriteLine("Escriba su selección:"); Op = int.Parse(Console.ReadLine()); if (Op == 1) { // Escribimos en el archivo EscribirArchivo = new StreamWriter("Archivo.txt", true); Console.WriteLine("Digite el texto a almacenar en el archivo y presione Enter"); //Aqui leemos desde consola una cadena de texto Texto = Console.ReadLine(); //Aqui escribimos en el archivo el texto almacenado en la variable Texto UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 7 EscribirArchivo.WriteLine(Texto); Console.WriteLine("Escritura en archivo exitosa."); EscribirArchivo.Close(); } else { //Leer texto almacenado en archivo LeerArchivo = new StreamReader("Archivo.txt", true); Console.WriteLine("\nTEXTO ALMACENADO EN EL ARCHIVO"); Console.WriteLine("------------------------------------------------"); while ((Texto = LeerArchivo.ReadLine()) != null) { Console.WriteLine(Texto); } Console.WriteLine("------------------------------------------------"); Console.WriteLine("\n\nFin mensaje en el archivo."); LeerArchivo.Close(); } Console.ReadKey(); } } } Ejemplo 2: persistencia utilizando estructuras de datos, este es el ejemplo de cómo se puede utilizar una estructura de datos para almacenar temporalmente información que luego enviaremos al archivo, podemos observar que la información a almacenar es el Nombre, Edad y Dirección de la persona, la estructura de datos contiene 3 variables dentro de ella y cuando la usamos en este ejemplo creamos un objeto de tipo estructura Persona y lo llamamos Acceso. Como puede observar en el ejemplo se han agregado dos librerías que son necesarias para poder escribir en archivos y para poder ejecutar el proceso del bloc de notas para abrir automáticamente el archivo creado. using System; using System.Diagnostics; //con esta librería podemos abrir aplicaciones como el bloc de notas. using System.IO; //librería necesaria para poder leer y escribir en archivos. Código dentro de la clase Program struct Persona { public String Nombre; public int Edad; public String Direccion; } static StreamWriter Escribir; static StreamReader Leer; static void Main(string[] args) { UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 8 Console.Title = "Segundo ejemplo de archivos persistentes con estructuras de datos"; int i = 0, contador = 0; String Opcion, Linea; //Creamos el objeto de tipo estructura Persona DatosPersona = new Persona(); //Objeto para escribir sobre el archivo do { Console.Clear(); Escribir = new StreamWriter("DatosPersonales.txt", true); Console.WriteLine("Persona con ID:[" + (i + 1) + "]"); Console.WriteLine("Nombre:"); DatosPersona.Nombre = Console.ReadLine(); Console.WriteLine("Edad:"); DatosPersona.Edad = int.Parse(Console.ReadLine()); Console.WriteLine("Direccion:"); DatosPersona.Direccion = Console.ReadLine(); //Escribimos los datos contenidos en la estructura hacia el archivo de texto Escribir.WriteLine("Persona con ID:" + (i + 1)); Escribir.WriteLine("Nombre: " + DatosPersona.Nombre); Escribir.WriteLine("Edad: " + DatosPersona.Edad); Escribir.WriteLine("Direccion: " + DatosPersona.Direccion); Escribir.WriteLine("----------------------------------"); i++; Escribir.Close(); Console.WriteLine("Desea ingresar otro registro? (S/N)"); Opcion = Console.ReadLine(); if (Opcion == "N" || Opcion == "n") { //La instrucción siguiente abre el bloc de notas de Windows para mostrar el // contenido del archivo DatosPersonales.txt Process.Start("DatosPersonales.txt"); } } while (Opcion == "S" || Opcion == "s"); //Creamos objeto para leer desde el archivo Leer = new StreamReader("DatosPersonales.txt"); while ((Linea = Leer.ReadLine()) != null) { Console.WriteLine(Linea); contador++; } Leer.Close(); Console.ReadKey(); } UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 9 Ejemplos adicionales paso a paso en C#: En este caso utilizaremos persistencia en los siguientes tipos de archivos. 1. Ejemplo de archivos de Texto Plano (txt) 2. Ejemplo de archivos CSV 3. Ejemplo de archivos XML Ejemplo Como realizar extracción y escritura de datos en un archivo de texto plano (txt) 1. Necesitamos crear nuestro proyecto.2. Seleccionamos Aplicación de consola. 3. Le colocamos el nombre de Persistencia_txt , a nuestro proyecto 4. Damos click en Aceptar UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 10 5. Tenemos nuestro entorno de trabajo listo. 6. importamos la librería System.IO; para poder realizar la lectura y escritura en archivos de texto. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 11 7. Agregamos las variables Globales a utilizar. 8. Antes de Continuar abrimos un bloc de notas. Ingresamos el siguiente contenido. 9. Guardamos el archivo, Seleccionamos la Ruta del archivo, esta será la misma donde se encuentra creado el proyecto. 10. Le colocamos el nombre de Texto1.txt. 11. Damos clic en guardar. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 12 12. Y el proyecto con sus archivos nos debe quedar así. 13. Ahora continuamos con el código, Inicializaremos las variables que utilizaremos. 14. Ahora procedemos a leer el contenido del archivo de texto. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 13 15. Recordemos que cada valor que trae el archivo “texto1.txt” es un número, estos números después de leer el archivo se encuentran almacenados en el arreglo de enteros llamado “números” ahora haremos una suma de esos elementos guardados en el arreglo y almacenaremos el valor de la suma en una variable llamada suma. 16. Ahora con esa suma calculada procederemos a escribir los datos en el archivo de texto. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 14 17. Ahora que ya hemos terminado damos clic en iniciar. 18. Al correrlo nos aparecerá una ventana con la ejecución del programa que hemos creado. 19. El contenido de nuestro archivo de texto después de haber ejecutado y cerrado el programa queda de la siguiente manera. Recordar que si se tiene abierto el archivo hay que cerrarlo y abrirlo nuevamente para poder visualizar los cambios. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 15 Con esto finalizamos la creación de un programa que lee texto de un archivo, utiliza lo que se encuentra en un archivo y lo almacena de nuevo en el mismo archivo de texto. Código de persistencia en archivo txt using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Persistencia_txt { class Program { /* Variables Globales */ static StreamReader leer; // Buffer para leer el contenido del Archivo de Texto, es decir que con este objeto nos conectamos al archivo para leer static StreamWriter escribir; // Buffer para guardar el contenido en el Archivo de Texto, con este objeto nos conectamos al archivo para escribir // Arreglo de Enteros para Almacenar lo que trae el archivo de Texto. En este caso se utiliza enteros ( int ) pero puede ser string, double // según lo que estemos leyendo. static int[] numeros; static void Main(string[] args) { // inicializamos el arreglo con una longitud de 5, que son los números de línea del archivo. numeros = new int[5]; // inicializamos la variable leer, que sirve para poder acceder al contenido del archivo mediante la ruta "../../../texto1.txt leer = new StreamReader("../../../texto1.txt"); int i = 0; // contador i = 0 string linea = ""; // linea = "" aquí almacenará temporalmente la línea que se está leyendo // A continuación hacemos un ciclo repetitivo cuya condición que controla la repetición es, mientras no llegue al fin del archivo. while (!leer.EndOfStream) { linea = leer.ReadLine(); // la variable linea es igual al contenido de la línea actual del archivo de texto. numeros[i] = Convert.ToInt32(linea); // numeros en la posición [i] es igual a la conversión a entero del string linea. Console.WriteLine("Numero " + (i + 1) + ":" + numeros[i]); // imprimimos un mensaje con el valor del número y la posición. i++; // aumentamos el contador en 1 } leer.Close(); // cerramos el archivo después de haberlo leído por completo int suma_entero = numeros.Sum(); // guarda el valor de la suma de los elementos del arreglo en la variable suma_entero. string suma = Convert.ToString(suma_entero); // se almacena en la variable suma (string) la conversión de entero a string de la suma_entero escribir = new StreamWriter("../../../texto1.txt"); // inicializamos la variable escribir con la dirección del archivo al cual queramos escribir Console.WriteLine("Guardando datos:"); // Imprimimos mensaje en pantalla, que nos indicará que se guardarán los archivos. // hacemos un ciclo repetitivo for desde x = 0; hasta que x sea < la longitud máxima del arreglo (numeros) esto nos permite escribir en el archivo for (int x = 0; x < numeros.Length; x++) { // guardamos el mensaje del número a utilizar en el archivo de texto plano escribir.WriteLine(""+numeros[x]); // imprimimos un mensaje donde nos muestra que numero se ha guardado en el archivo de texto Console.WriteLine("Numero Guardado:" + numeros[x] ); } escribir.WriteLine("Total de la suma:"); // guardamos un mensaje en el archivo de texto: "Total de suma" escribir.WriteLine(suma); // guardamos el valor de la suma. escribir.Close(); // cerramos el archivo cuando terminamos de escribir en él. Console.WriteLine("Total de la suma:" + suma); // imprimimos un mensaje con el total de la suma Console.WriteLine("Aqui termina el programa, Presione Enter"); // imprimimos un mensaje de finalización del programa Console.ReadKey(); // hace una pausa en la ejecución hasta que presionemos una tecla. } UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 16 } } Ejemplo Como realizar extracción y escritura de datos en un archivo CSV 1. Necesitamos crear nuestro proyecto. 2. Seleccionamos Aplicación de consola.3. Le colocamos el nombre de Persistencia_csv, a nuestro proyecto 4. Damos clic en Aceptar 5. Tenemos nuestro entorno de trabajo listo. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 17 6. importamos la librería System.IO; para poder realizar la lectura y escritura en archivos de texto. 7. Agregamos las variables Globales a utilizar. 8. Antes de Continuar abrimos un block de notas. Ingresamos el siguiente contenido. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 18 9. Guardamos el archivo, Seleccionamos la Ruta del archivo, esta será la misma donde se encuentra creado el proyecto. 10. Le colocamos el nombre de Texto1.csv. 11. Damos clic en guardar. 12. Y el proyecto con sus archivos nos debe quedar así. 13. Ahora continuamos con el código, Inicializaremos las variables que utilizaremos. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 19 14. Ahora procedemos a leer el contenido del archivo de texto. 15. Recordemos que cada valor que trae el archivo “texto1.csv” es un número, estos números después de leer el archivo se encuentran almacenados en el arreglo de enteros llamado “números” ahora haremos una suma de esos elementos guardados en el arreglo y almacenaremos el valor de la suma en una variable llamada suma. 16. Ahora con esa suma calculada procederemos a escribir los datos en el archivo de texto. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 20 17. Ahora que ya hemos terminado damos clic en iniciar. 18. Al correrlo nos aparecerá una ventana con la ejecución del programa que hemos creado. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 21 19. El contenido de nuestro archivo csv después de haber ejecutado y cerrado el programa queda de la siguiente manera. Recordar que si se tiene abierto el archivo hay que cerrarlo y abrirlo nuevamente para poder visualizar los cambios. Hay que tener en cuenta que el archivo con formato CSV puede abrirse en un editor de texto plano como también con algún editor de hojas de cálculo en este caso utilizaremos Microsoft Excel. Con esto finalizamos la creación de un programa que lee texto de un archivo csv, utiliza lo que se encuentra en un archivo y lo almacena de nuevo en el mismo archivo csv. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 22 Código de persistencia en archivo CSV using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; // Agregamos esta librería namespace Persistencia_csv { class Program { /* Variables Globales */ static StreamReader leer; // Buffer u objeto para leer el contenido del Archivo de Texto static StreamWriter escribir; // Buffer u objeto para guardar el contenido en el Archivo de Texto static int[] numeros; // Arreglo de Enteros para Almacenar lo que trae el archivo de Texto. // En este caso se utiliza enteros ( int ) pero puede ser string, double // según lo que estemos leyendo. static void Main(string[] args) { // inicializamos el arreglo con una longitud de 5, que son los numeros de línea del archivo. numeros = new int[5]; // inicializamos la variable leer, que sirve para poder acceder al contenido del archivo mediante la ruta "../../../texto1.csv leer = new StreamReader("../../../texto1.csv"); int i = 0; // contador i = 0 string linea = ""; // linea = "" , aquí almacenará temporalmente la linea que se está leyendo while (!leer.EndOfStream) // Ejecutamos el ciclo repetitivo mientras no llegue al fin del archivo. { linea = leer.ReadLine(); // linea es igual al contenido de la linea actual del archivo de texto. numeros[i] = Convert.ToInt32(linea); // numeros en la posición [i] es igual a la conversión a entero del string linea. Console.WriteLine("Numero " + (i + 1) + ":" + numeros[i]); // imprimimos un mensaje con el valor del número y la posición. i++; // aumentamos el contador en 1 } leer.Close(); // cerramos el archivo después de haberlo leído por completo int suma_entero = numeros.Sum(); // guarda el valor de la suma de los elementos del arreglo en la variable suma_entero. string suma = Convert.ToString(suma_entero); // se almacena en la variable suma (string) la conversión de entero a string de la suma_entero escribir = new StreamWriter("../../../texto1.csv"); // inicializamos la variable escribir con la dirección del archivo al cual queramos escribir Console.WriteLine("Guardando datos:"); // Imprimimos mensaje en pantalla, que nos indicará que se guardarán los archivos. // A continuación hacemos un ciclo repetitivo desde x = 0; hasta que x sea < la longitud máxima del arreglo ( numeros ) para guardar en archivo for (int x = 0; x < numeros.Length; x++) { escribir.WriteLine("" + numeros[x]); // guardamos el mensaje del número a utilizar en el archivo csv. Console.WriteLine("Numero Guardado:" + numeros[x]); // mensaje donde nos muestra que numero se ha guardado en el archivo csv } escribir.WriteLine("Total de la suma:"); // guardamos un mensaje en el archivo de texto: "Total de suma" escribir.WriteLine(suma); // guardamos el valor de la suma. escribir.Close(); // cerramos el archivo Console.WriteLine("Total de la suma:" + suma); // imprimimos un mensaje con el total de la suma Console.WriteLine("Aqui termina el programa, Presione Enter"); // imprimimos un mensaje de finalización del programa Console.ReadKey(); // hacemos una pausa para salir hasta que se presione una tecla. } } } UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURAINTRODUCCIÓN A LA INFORMÁTICA 23 Ejemplo Como realizar extracción y escritura de datos en un archivo XML Ya que un archivo XML se maneja de diferente manera la lógica será diferente, en este caso crearemos primero el archivo XML para luego realizar una lectura del archivo recién creado. 1. Necesitamos crear nuestro proyecto. 2. Seleccionamos Aplicación de consola. 3. Le colocamos el nombre de Persistencia_xml, a nuestro proyecto 4. Damos clic en Aceptar 5. Ahora tenemos nuestro entorno listo para trabajar. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 24 6. importamos la librería System.Xml.Linq; para poder realizar la lectura y escritura en archivos XML. 7. Ahora haremos la digitaremos el código para crear nuestro archivo XML. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 25 8. Ahora digitaremos el código para poder leer el archivo XML que creamos anteriormente. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 26 9. Ahora que ya tenemos listo todo procederemos a ejecutar el programa. 10. De esta manera nos queda el resultado del programa corriendo. 11. Ahora cabe aclarar que nuestro archivo ha sido creado en la misma dirección donde está guardado nuestra solución o nuestro proyecto, en este caso ha sido en: UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 27 C:\Users\NombreUsuario\Documents\Visual Studio 2015\Projects\Persistencia_xml Y como podemos ver ahí crea nuestro archivo XML para ser consultado o llenado de nuevo. 12. Consultaremos el contenido del Archivo para estar seguros que todo se guardó correctamente. 13. Hemos corroborado que nuestro archivo ha sido creado correctamente. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 28 Código de persistencia en un archivo XML using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; // Agregamos esta librería para trabajar con archivos XML using System.Xml.Linq; // Agregamos esta librería para trabajar con archivos XML namespace Persistencia_xml { class Program { static void Main(string[] args) { XDocument miXML = new XDocument( // creamos la instancia del objeto XDocument para poder utilizar sus funciones. // con este objeto podemos crear archivos xml con sus atributos y contenidos. new XDeclaration("1.0", "utf-8", "yes"), // Declaramos el tipo de XML que es 1.0 con codificación UTF-8 new XComment("Lista de Alumnos"), // declaramos un comentario new XElement("Alumnos", // Creamos un elemento(etiqueta) llamado Alumnos new XElement("Alumno", // creamos un subelemento ( etiqueta ) llamada Alumno new XAttribute("NoControl", "05231104"), // Le agregamos el Atributo NoControl con su valor = 05231104 new XElement("Nombre", "Edison García"), // Agregamos otro sub elemento ( etiqueta ) llamado nombre con valor = "Edison García" new XElement("Semestre", "7")), // Agregamos otro sub elemento ( etiqueta ) llamado Semestre con valor = "7" new XElement("Alumno", // creamos un subelemento ( etiqueta ) llamada Alumno new XAttribute("NoControl", "05231106"), // Le agregamos el Atributo NoControl con su valor = 05231106 new XElement("Nombre", "Abraham Gomez García"), // Agregamos otro sub elemento ( etiqueta ) llamado nombre con valor = // "Abraham Gomez García" new XElement("Semestre", "9")), // Agregamos otro sub elemento ( etiqueta ) llamado Semestre con valor = "9" new XElement("Alumno", // creamos un subelemento ( etiqueta ) llamada Alumno new XAttribute("NoControl", "05231108"), // Le agregamos el Atributo NoControl con su valor = 05231108 new XElement("Nombre", "Alejandre Carvajal"), // Agregamos otro sub elemento ( etiqueta ) llamado nombre con valor = // "Alejandre Carvajala" new XElement("Semestre", "7")), // Agregamos otro sub elemento ( etiqueta ) llamado Semestre con valor = "7" new XElement("Alumno", // creamos un subelemento ( etiqueta ) llamada Alumno new XAttribute("NoControl", "06231110"), // Le agregamos el Atributo NoControl con su valor = 06231110 new XElement("Nombre", "Luis Armando"), // Agregamos otro sub elemento ( etiqueta ) llamado nombre con valor = "Luis // Armando" new XElement("Semestre", "10")) // Agregamos otro sub elemento ( etiqueta ) llamado Semestre con valor = "10" ) ); miXML.Save(@"../../../Texto1.xml"); // Guarda el contenido en archivo XML llamado Texto1.xml en la ubicación especificada XmlTextReader reader = new XmlTextReader("../../../Texto1.xml"); // Se crea el objeto reader con la direccion de nuestro archivo XML creado while (reader.Read()) // El ciclo se repite mientras exista algo que leer { switch (reader.NodeType) // NodeType es la variable a usar en la estructura switch { case XmlNodeType.Element: // The node is an element. // Si NodeType es Element ; imprime la etiqueta de apertura del elemento Console.Write("<" + reader.Name); // Imprime <nombreEtiqueta Console.WriteLine(">"); // Imprime > break; case XmlNodeType.Text: // Si NodeType es Text Console.WriteLine(reader.Value); // Imprime el texto de la etiqueta. break; case XmlNodeType.EndElement: // Si NodeType es Element ; imprime la etiqueta de cierre del elemento Console.Write("</" + reader.Name); // Imprime </nombreEtiqueta Console.WriteLine(">"); // Imprime > break; } } Console.ReadLine(); // Lee una linea para evitarque el programa se cierre de un solo; } } } UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 29 Con estos ejemplos damos por finalizado la guía de persistencia en C# y usted como estudiante procederá a elaborar el ejercicio de laboratorio que será calificado por su tutor. PRODUCTO A ELABORAR POR EL ESTUDIANTE: Resuelva el siguiente ejercicio utilizando archivos de texto tomando ideas de los ejercicios presentados anteriormente que leen y escriben en archivos de texto plano (.txt). Ejercicio Evaluado Desarrolle un programa haciendo uso de estructuras repetitivas, estructuras de datos y persistencia hacia un archivo de texto plano (extensión TXT) que permita gestionar una serie de datos de los empleados de la empresa, para ello se solicita sus servicios para crear un programa que permita almacenar los datos de los empleados que posee la empresa, El programa debe permitir al usuario introducir todos los datos del empleado que desee a un archivo llamado empleados.txt o visualizarlos mediante un menú y también almacenar y recuperar los porcentajes de las retenciones de ISSS, AFP y Renta en otro archivo llamado configuracion.txt todo esto gestionado mediante las opciones de un menú de consola que se mencionan más abajo en este ejercicio. Los datos a almacenar de cada empleado en el archivo empleados.txt son los siguientes: CodigoEmpleado: De tipo texto (números y letras) y digitado por el usuario, puede usar por ejemplo el formato EMP0001. Nombres: Son los nombres del empleado. Apellidos: Son los apellidos del empleado. Cargo: Contiene el cargo que el empleado tienen en la empresa. SalarioNominal: Contendrá el salario nominal del empleado. Edad: contiene la edad del empleado. Los datos a almacenar de configuración en el archivo configuracion.txt son los siguientes: PorcentajeISSS: Contiene el porcentaje a aplicar para la retención del ISSS Ej. Si es 3% almacenará 0.03. PorcentajeAFP: Contiene el porcentaje a aplicar para la retención de AFP el formato es igual al del ISSS. PorcentajeRenta: Contiene el porcentaje a aplicar para la retención de renta, para efectos de simplicidad se usará un porcentaje fijo y el formato es como el del porcentaje del ISSS y AFP Ej. Si es 10% almacenará 0.10. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 30 El programa debe contener un menú principal en consola que presente al usuario las siguientes opciones y el programa debe estar ejecutándose continuamente hasta que el usuario lo detenga: 1. Guardar configuración retenciones: Esta opción debe permitir guardar en un archivo de texto llamado configuracion.txt el porcentaje de ISSS, AFP y Renta (Use un porcentaje fijo como por ejemplo 10% para este ejercicio) se deberá reemplazar la configuración anterior en caso de existir configuracion.txt al ejecutar esta opción del menú. 2. Imprimir y recuperar configuración retenciones: Esta opción debe permitir ver en pantalla el valor del porcentaje de ISSS, AFP y Renta recuperados desde el archivo configuracion.txt y además recuperar dichos porcentajes en variables que usará para los cálculos que debe hacer de retenciones en la opción 5. 3. Registrar nuevo empleado: Permite crear un nuevo empleado y registrar todos sus datos en el archivo empleados.txt Nota: asegúrese de poner códigos de empleado únicos. 4. Ver todos los empleados registrados: Muestra en pantalla todos los empleados registrados en el archivo empleados.txt sin necesidad de calcular el ISSS, AFP y Renta, solo debe mostrar los datos almacenados en empleados.txt exclusivamente. 5. Buscar empleado por código: Mediante un código de empleado que el usuario digita en consola, se debe buscar el empleado coincidente en el archivo empleados.txt y si hay resultados, se despliegan en pantalla los datos completos de dicho empleado buscado y además haciendo uso del Salario Nominal recuperado se debe calcular e imprimir también el monto de ISSS, AFP, Renta, si no se encuentra el empleado se presenta un mensaje que diga que no se encontró. Nota: El porcentaje de ISSS, AFP y Renta se deben haber recuperado del archivo de configuración previamente con la opción 2 del menú y haberse almacenado en variables para luego hacer los respectivos cálculos e imprimir los montos respectivos en pantalla para esas retenciones calculadas. 6. Salir: Esta opción debe detener la ejecución del programa. El nombre del archivo de texto en donde se almacena la información de los empleados debe ser empleados.txt y el nombre del archivo en donde se almacenan los porcentajes de las retenciones debe llamarse configuracion.txt. TIPS Y NOTAS: Para calcular el monto de la renta primero reste el monto de ISSS y AFP al salario nominal luego debe aplicar a dicho resultado el respectivo porcentaje de renta que previamente registro en el sistema. El StreamReader recorre los archivos de texto línea por línea cuando usa una estructura repetitiva esa es su forma de funcionamiento como en los ejemplos mostrados en la parte 1 de esta guía tome en cuenta eso para recuperar o buscar información en el archivo y recuperar los UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 31 demás datos del empleado buscado y/o también hacer todos los cálculos o manipulación de la información que necesite para resolver el ejercicio a entregar. Se recomienda hacer uso de dos estructuras de datos para almacenar temporalmente la información y luego trasladarla al archivo empleados.txt y configuracion.txt respectivamente. Se recomienda usar estructura switch (preferentemente) o if anidada para realizar las acciones mostradas en el menú: 1. Guardar configuración retenciones, 2. Imprimir y recuperar configuración retenciones, 3. Registrar nuevo empleado, 4. Ver todos los empleados registrados, 5. Buscar empleado por código, 6. Salir, y una estructura repetitiva para que el programa se mantenga en ejecución hasta que decidamos salir con la opción 6 del menú. EJEMPLOS DE FORMATOS DE SALIDAS EN PANTALLA Y DE ALMACENAMIENTO EN ARCHIVOS. Por ejemplo, los datos se deben almacenar en el archivo de texto empleados.txt así (con separadores y cada dato del empleado por fila): ---------------------------------------------- EMP0001 Alex Ernesto Castillo Godoy Gerente 500 20 ---------------------------------------------- Por ejemplo, los datos de retenciones se deben almacenar en el archivo de texto configuracion.txt así, es decir uno por fila: 0.03 0.0725 0.10 Cuando se visualicen en pantalla con la opción del 2 del menú mostrarse así agregándoles un texto descriptivo y el dato de porcentaje recuperado: Porcentaje ISSS: 0.03 Porcentaje AFP: 0.0725 Porcentaje Renta: 0.10 UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 32 Los datos del empleado cuando se visualicen en pantalla con la opción del 4 del menú mostrarse así, recuerde que se deben mostrar todos los empleados guardados en el archivo y como puede observar en la impresión en pantalla se agregan textos descriptivos a cada dato: ---------------------------------------------- Código del empleado: EMP0001. Nombres: Alex Ernesto. Apellidos: Castillo Godoy. Cargo: Gerente. SalarioNominal: 500. Edad: 20 ---------------------------------------------- Y cuando se visualicen en pantalla con la opción del 5 del menú mostrarse así los datos del empleado buscado por código en el caso de haber sido encontrado: ---------------------------------------------- Código del empleado: EMP0001. Nombres: Alex Ernesto. Apellidos: Castillo Godoy. Cargo: Gerente. Salario Nominal: 500. Edad: 20 ISSS: Aquí se mostrará el monto de ISSS calculado. AFP: Aquí se mostrará el monto de AFP calculado. Renta: Aquí se mostrará el monto de Renta calculado. ---------------------------------------------- Se pide: Planteamiento general del problema (Método de la caja negra). Análisis del problema. Definición de variables de entrada. Definición de variables de salida. Restricciones. Proceso. Definición de variables de proceso. Diseño de la solución. o Algoritmo narrado. o Sintaxis en C# UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 33 INDICACIONES DE ENTREGA Los estudiantes entregarán un archivo comprimido conteniendo la carpeta del proyecto en C# del ejercicio solucionado, el proyecto debe tener el nombre EjercicioPersistenciaCARNET. Además, entregarán un documento PDF con el desarrollo de las fases del proceso solucionador de problemas, para el ejercicio llamado CARNET_ReporteLAB2.pdf. Resumiendo, el archivo comprimido se deberá llamar CARNET_LAB2.ZIP, el reporte tendrá el nombre CARNET_ReporteLAB2.pdf, en donde reemplazará la palabra CARNET por su número de carnet y la carpeta del proyecto completo será nombrada EjercicioPersistenciaCARNET, todo esto se guardará en el archivo comprimido y ese archivo comprimido es el que entregarán. 1. Documento CARNET_ReporteLAB2.pdf: Deberá de contemplar lo siguiente: Carátula Introducción Objetivo general Objetivos específicos Desarrollo del ejercicio o Enunciado. o Planteamiento general del problema (Método de la caja negra). o Análisis del problema. o Definición de variables de entrada. o Definición de variables de salida. o Restricciones. o Proceso. o Definición de variables de proceso. o Diseño de la solución. Algoritmo narrado. Sintaxis en C# Conclusiones. Recomendaciones. Carátula del reporte. En esta parte se presenta la información personal (nombre, carnet, asignatura) e información de la Universidad. UNIVERSIDAD DE EL SALVADOR EN LÍNEA FACULTAD DE INGENIERÍA Y ARQUITECTURA INTRODUCCIÓN A LA INFORMÁTICA 34 a. Imagen de minerva es decir el logo de la UES, centrada en la parte superior. b. Datos de la Universidad, Facultad, Carrera, Cátedra. c. Titulo o tema. d. Nombre de estudiante, seguido del carnet en mayúsculas. e. Asignatura. f. Sede. g. Grupo en el aula virtual. h. Tutor (a). i. Ciclo y año. j. Lugar y fecha. Recuerde el nombre del documento será CARNET_ReporteLAB2.pdf y o entregará junto a la carpeta del proyecto completa llamada EjercicioPersistenciaCARNET, todo eso debe entregarlo dentro de un archivo comprimido llamado CARNET_LAB2.ZIP. FECHA ASIGNACION: 11 de mayo de 2020 8:00 am FECHA ENTREGA: 24 de mayo de 2020 11:55 pm MEDIO: Enlace en aula virtual llamado Laboratorio 2 Evaluado: Persistencia de datos, ubicado en la pestaña evaluaciones. “Huye de los elogios, pero trata de merecerlos”.
Compartir