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 .NetCore

Requisitos

  • 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

Descargar

Ejercicio

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.



001_opf


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.

002_opf


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.

003_opf


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.

004_opf


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.

005_opf


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.

006_opf


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.

007_opf


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.

008_opf


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.

009_opf


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);
    
  
010_opf


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:

  • Es un archivo separado por comas.
  • La primer linea contiene los titulos de las columnas y al parecer son de datos de personas.
  • El separador de lineas es el caracter LF (Line Feed).


  • 011_opf


    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 ....

    012_opf


    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.

    013_opf


    Abrimos nuestra clase Person y comenzamos a declarar sus propiedades de acuerdo al analisis previo del archivo los cuales son:

    014_opf

    • Vacio
    • First Name
    • Last Name
    • Gender
    • Country
    • Age
    • Date
    • Id
    Al finalizar nuestra declaración de propiedades tendremos algo parecido a lo siguiente:

    015_opf

    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();
            }
          
        

    016_opf


    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.

    017_opf


    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.



    018_opf


    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.



    019_opf

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

    020_opf


    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.



    021_opf


    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