Abrir y Parsear un archivo en .Netcore con Visual Studio 2019.
Fecha de Publicación: 2020-09-04
Introducción
En este ejercicio abriremos un archivo y alojaremos su contenido en una lista de objetos en .NetCoreRequisitos
- Visual Studio Community 2019
- Archivo para abrir y parsear el cual se puede descargar de la pagina indicada en la sección Referencias al final de este post
Resultado
La siguiente imagen muestra lo que obtendremos al realizar este ejercicio:
Codigo Fuente
DescargarEjercicio
Comenzaremos como siempre abriendo nuestro Visual Studio y creando nuestra solución con un proyecto de consola para este ejemplo lo llamare OpenAndParseFile. Si no tienes conocimiento de como crearlo te dejo el link donde puedes aprender como hacerlo y regresar despues a este ejercicío.
Lo que haremos ahora es instalar nuestra libreria System.Configuration desde nuestro administrador de paquetes Nuget, esto lo realizamos de la siguiente manera. Nos posicionamos en Explorador de soluciones damos clic derecho sobre nuestro proyecto en este caso OpenAndParseFile y despues buscamos Administrar paquetes NuGet ... y damos clic.
Nos aparecera una ventana llamada NuGet OpenAndParseFile donde nos permitiria visualizar nuestros paquetes instalados, nos posicionaremos en la pestaña Examinar y en el buscador tecleamos System.config en la parte de abajo de la ventana nos actualizara conforme vayamos escribiendo, deberemos de localizar el paquete System.Configuration.ConfigurationManager lo seleccionaremos y daremos clic en el boton instalar que se encuentra en la parte derecha de la ventana.
Nos mostrara una ventana donde se listan los cambios que se realizaran en el proyecto, confirmaremos la instalación dando clic en el boton Aceptar.
Una vez que terminado el proceso de instalación en nuestro Explorador de soluciones en Dependencias -> Paquetes deberemos visualizar que el paquete se encuentra en instalado como se muestra en la imagen.
El siguiente paso es agregar un archivo App.Config para importar la ruta de nuestro archivo de manera local, para ello nos posicionamos en nuestro proyecto y daremos clic derecho una vez desplegado nos posicionaremos en Agregar y despues en Nuevo elemento ... y clic nuevamente.
Una vez desplegada la ventana de Agregar nuevo elemento nos posicionamos en Elementos de Visual C# y buscamos Archivo de configuración de aplicaciones al encontrarlo daremos clic en Agregar.
Abriremos nuestro archivo App.config y agregaremos una sección de appSettings y dentro de esta sección una key con la dirección de nuestro archivo con el que trabajaremos como se muestra en la imagen.
Abriremos nuestra clase Program y comenzaremos declarando una variable tipo string y despues la instrucción:
strPathFile = ConfigurationManager.AppSettings["PathFile"].ToString();
Con la que indicamos que tome del archivo App.config de la sección appSettings la key llamada PathFile y la convierta a una cadena de texto.
Despues declaramos otra variable tipo string en la cual alojaremos el contenido del archivo que abriremos, la instrucción con la que abrimos el archivo es la siguiente:
strBuffer = File.ReadAllText(strPathFile);
Lo siguiente es analizar nuestro archivo el cual vamos a parsear, lo abrimos y visualizamos la información de aqui se puede deducir lo siguiente:
Con este analisis ya podemos realizar nuestro codigo para parsear el archivo para lo cual crearemos una clase que contenga las propiedades de la persona de acuerdo a nuestro archivo y posteriormete de ese objeto Person crearemos una lista para alojar todos los datos del archivo, para ello nos posicionaremos en nuestro proyecto y daremos clic derecho sobre el, despues buscaremos Agregar y dentro de agregar Nuevo elemento ....
Una vez que nos muestra la ventana de Agregar nuevo elemento buscamos Elementos de Visual C# y despues seleccionamos Clase, escribimos su nombre Person y finalmente damos clic en Agregar.
Abrimos nuestra clase Person y comenzamos a declarar sus propiedades de acuerdo al analisis previo del archivo los cuales son:
- Vacio
- First Name
- Last Name
- Gender
- Country
- Age
- Date
- Id
Te dejo el link con el codigo de la clase finalizado.
Nos regresamos a nuestra clase Program.cs y declaramos una lista vacia con objetos tipo Person
List'<'Person'>' lst = null;
creamos un metodo ParseData donde enviaremos nuestro texto almacenado previamente en la variable strBuffer
y retornaremos una lista de tipo Person.
private static List'<'Person'>' ParseData(string strBuffer)
{
throw new NotImplementedException();
}
Bien, lo que sigue es modificar el metodo ParseData, lo que haremos es separar primero nuestro texto en lineas, esto lo hacemos con la funcion Split y un foreach para iterar el resultado del Split quedando de la siguiente forma:
foreach (string str in strBuffer.Split(new char[] { '\n' }, StringSplitOptions.None))
{
}
Recuerda que para separar las lineas observamos que el caracter que las separa es LF eso se traduce como un \n en el
codigo de .NetCore.
En este momento ya tenemos separadas las lineas, ahora separaremos los campos de nuestro archivo, el cual sera con el caracter , (coma) que esta definido como separador de nuestro archivo.
string[] aryStr = str.Split(",", StringSplitOptions.None);
Nuevamente utilizamos el metodo Split para separar nuestra linea pero en este caso sera un arreglo donde se alojaran los
resultados obtenidos por este.
Solo nos queda guardar los resultados de los campos de acuerdo a su posición en el arreglo, para ello ocuparemos un for y un switch , el primero lo iteraremos para ir accediendo a cada posición del arreglo y el segundo para ir alojando de acuerdo a la posición el campo correspondiente en un objeto tipo Person previamente creado.
Al finalizar el recorrido del for guardamos los campos obtenidos en la lista que regresaremos al finalizar el recorrido de todas las lineas del buffer
lst.Add(p);
En la imagen siguiente se muestra como queda el metodo completo con todos los campos ya declarados, existen datos diferentes a cadenas de texto los cuales se tienen que convertir a su tipo correspondiente ellos son: int, date, para convertirlos a sus respectivos tipos se ocupan las siguientes instrucciones:
int nIsNum = 0;
DateTime dt = new DateTime(1900, 1, 1);
//Numeros
int.TryParse(aryStr[i], out nIsNum);
//Fechas
DateTime.TryParse(aryStr[i], out dt);
Ya para finalizar ponemos un punto de interrupción en nuestro codigo en el metodo Main despues de esta instrucción
lst = ParseData(strBuffer);
y probamos nuestra aplicación, como podemos visualizar se llena la lista con los campos correctamente y no marca ningun error.
Y con esto hemos finalizado el ejercicio!!!
Muchas gracias y si te fue util el ejercicio por favor hazmelo saber en las formas de contacto que se muestran en la parte inferior.
Hasta la proxima.
Referencias