Leer un archivo CSV en una tabla de datos en C#

Naila Saad Siddiqui 12 octubre 2023
  1. Bibliotecas para leer un archivo CSV en una tabla de datos en C#
  2. Utilice GenericParser de Andrew Rissing para leer un archivo CSV y mostrarlo en una tabla de datos en C#
  3. Use CSV Reader de Sebastien Lorion para leer un archivo CSV y mostrarlo en una tabla de datos en C#
  4. Utilice el analizador de campos de texto para leer un archivo CSV y mostrarlo en una tabla de datos en C#
Leer un archivo CSV en una tabla de datos en C#

Este artículo explora diferentes bibliotecas de C# que se pueden usar para analizar un archivo CSV y mostrar su contenido en un DataTable en una ventana de C#.

Bibliotecas para leer un archivo CSV en una tabla de datos en C#

Al programar, a menudo nos encontramos con una situación en la que necesitamos convertir un formato de datos a otro. El formato CSV es uno de los formatos para guardar algunos datos semiestructurados en un archivo.

Un archivo CSV es un archivo delimitado por comas en el que los datos se almacenan en varias columnas y campos y se separan mediante un delimitador de columna (,).

Muchas bibliotecas de C# diferentes están disponibles para analizar este tipo de archivos. Para este artículo, discutiremos las tres bibliotecas más populares y comúnmente utilizadas, que son:

  1. Analizador genérico por Andrew Rissing
  2. Lector CSV de Sebastien Lorion
  3. Analizador de campos de texto

Estas bibliotecas están desarrolladas en lenguaje C# y proporcionan formas sencillas de obtener los datos de los archivos CSV y mostrarlos en la pantalla.

Utilice GenericParser de Andrew Rissing para leer un archivo CSV y mostrarlo en una tabla de datos en C#

GenericParser es una solución portátil y liviana que analiza eficientemente datos delimitados y de ancho fijo con pocos requisitos externos. Cualquier solución proporcionada por Microsoft se puede reemplazar con GenericParser, que también ofrece una funcionalidad única.

El código tiene un diseño claro y es fácil de entender y modificar. Este analizador es el más eficiente en comparación con los otros dos analizadores en términos de memoria y tiempo.

Instalación y uso de GenericParser

Para instalar los archivos de biblioteca necesarios para GenericParser, primero crearemos una aplicación de formulario de Windows en Visual Studio y navegaremos a Herramientas->Administrar paquetes Nuget para la solución, como se muestra en la siguiente captura de pantalla:

Paso 1 para instalar la biblioteca GenericParser: paquetes NuGet

Aparecerá una ventana que muestra diferentes paquetes disponibles para su proyecto.

Dirígete a la pestaña Examinar, busca Generic Parser y selecciona Instalar después de seleccionar tu proyecto en el panel derecho de la ventana. Esto se demuestra en la siguiente captura de pantalla:

Paso 2 para instalar la biblioteca GenericParser

Esto instalará todos los archivos de biblioteca necesarios en su proyecto. Una vez completada la instalación, puede usar la biblioteca en su código.

Para el código, hemos creado un DataGridView en un formulario para mostrar la tabla de datos que se completará a partir de un archivo CSV. Abra el archivo Form1.cs y escriba el código en la función de carga de formulario.

El primer paso es crear un objeto de GenericParserAdapter. Estamos usando la clase Adaptador ya que necesitamos mostrar los datos en la Tabla de datos.

La clase Adapter nos proporciona el método para copiar directamente todos los datos en la tabla de datos.

Después de crear el objeto, proporcionamos la ruta para que se lea el archivo CSV usando la función SetDataSource. Cuando se proporciona la fuente de datos, se establecen diferentes atributos del archivo de datos, como el delimitador de columna, los encabezados de la primera fila, el tamaño del búfer, el número máximo de filas y el calificador de texto.

Después de la inicialización, obtendremos los datos en el DataTable usando la función GetDataTable. Esta función completa automáticamente todos los datos del archivo CSV en la tabla de datos, incluidos los encabezados de las filas.

Encapsulemos esto en un código C#:

DataTable dataTable = new DataTable();

using GenericParserAdapter dataParser = new GenericParserAdapter();
dataParser.SetDataSource("SampleCSVFile.csv");
dataParser.ColumnDelimiter = ',';
dataParser.FirstRowHasHeader = true;
dataParser.SkipStartingDataRows = 0;
dataParser.MaxBufferSize = 4096;
dataParser.MaxRows = 1000000;
dataParser.TextQualifier = '\"';

dataTable = dataParser.GetDataTable();

Cuando se completa la tabla de datos, la vincularemos con el DataGridView en el formulario para que todos los datos se muestren en forma tabular.

dataGridView1.DataSource = dataTable;

Cuando se ejecuta, esto dará el siguiente resultado:

Salida del analizador genérico

Use CSV Reader de Sebastien Lorion para leer un archivo CSV y mostrarlo en una tabla de datos en C#

El lector CSV de Sebastian Lorion se conoce como Lumen Works CSV Reader. Es un lector sin caché de solo avance cuyo diseño se basa en System.IO.StreamReader (lo mismo que a veces se denomina cursor de manguera contra incendios).

Funciona unas 15 veces más rápido en comparación con los métodos OLEDB y regex, pero utiliza muy poca memoria.

Para instalar esta biblioteca, buscaremos Nuget Packages (ver el ejemplo anterior para este paso) y buscaremos LumenWorks CSV Reader.

Paso 1 para instalar CSV Reader Library

Tiene múltiples clases que brindan diferentes funcionalidades para leer archivos CSV. CsvReader y CachedCsvReader se encuentran entre ellos.

CsvReader se usa cuando necesita leer línea por línea y mostrarlo en la pantalla. CachedCsvReader se usa cuando necesita vincular los datos CSV a algún visor de datos en la pantalla, como un DataGrid.

Es tan simple como abrir el archivo y mostrarlo en la pantalla.

Consideremos que tenemos un archivo CSV de muestra como en el ejemplo anterior, y necesitamos analizar ese archivo CSV y mostrarlo en DataGridView en la aplicación Formulario (al igual que en el ejemplo anterior).

using (CachedCsvReader dataReader = new CachedCsvReader(new StreamReader("SampleCSVFile.csv"),
                                                        true)) {
  // The headers in the CSV file will be the columns of the DataTable
  dataGridView1.DataSource = dataReader;
}

Como necesitamos mostrar los datos en un DataGridView, usamos la clase CachedCsvReader. La creación de sus objetos toma un objeto de StreamReader porque su diseño subyacente se basa en StreamReader.

Después de abrir el archivo, todos los datos del archivo se guardarán en el objeto dataReader. Vincularemos ese objeto con el DataGridView en la pantalla Formulario.

El DataGridView se completará automáticamente según el número de columnas e incluso los nombres de las columnas. No es necesario que cree las columnas usted mismo.

El resultado será el mismo que el anterior, ya que hemos utilizado el mismo archivo para ambos segmentos de código.

Salida del lector CSV

Utilice el analizador de campos de texto para leer un archivo CSV y mostrarlo en una tabla de datos en C#

La clase TextFieldParser fue portada del espacio de nombres de Microsoft, VisualBasic.FileIO, anteriormente un componente de Visual Basic.

Tenga en cuenta que este analizador solo es compatible con versiones de .NET Core 3.0 y superiores. No es compatible con las versiones 2.2 y anteriores de .NET Core.

El TextFieldParser ofrece métodos y propiedades para analizar archivos de texto estructurado. También admite dos tipos de archivos: delimitados (CSV) y de ancho fijo.

El único inconveniente es que no es tan rápido y eficiente como los dos analizadores anteriores. Además, no proporciona muchas funcionalidades como los otros analizadores discutidos en este artículo, como vincular datos con algunas vistas u obtener los datos en forma tabular.

Debe leer explícitamente los datos fila por fila y completar la tabla usted mismo. Esto lo convierte en un proceso largo y requiere más pasos de codificación.

Necesitamos instalar el paquete Nuget para implementar el analizador de campos de texto. Navegue a través de la ventana del paquete NuGet y busque Text Field Parser:

Paso 1 de instalación de la biblioteca TextFieldParser

Después de instalar los archivos de biblioteca necesarios, diríjase al archivo de código y cree una función para leer los datos del archivo CSV. En esta función, primero crearemos un objeto de TextFieldParser y un objeto DataTable.

Avanzando más, especificaremos el símbolo del token de delimitación para el objeto e inicializaremos otros valores.

Después de eso, leeremos la primera fila del archivo para crear las columnas de la tabla de datos y agregaremos esas columnas. Luego, leeremos y agregaremos los datos restantes a la DataTable fila por fila.

Encapsulémoslo en una función de codificación:

private static DataTable ParseDataFromCSV(string path) {
  DataTable myData = new DataTable();
  try {
    using (TextFieldParser reader = new TextFieldParser(path)) {
      reader.SetDelimiters(new string[] { "," });
      reader.HasFieldsEnclosedInQuotes = true;
      string[] col_headers = reader.ReadFields();
      foreach (string h in col_headres) {
        DataColumn d1 = new DataColumn(h);
        d1.AllowDBNull = true;
        myData.Columns.Add(d1);
      }

      while (!reader.EndOfData) {
        string[] row_data = reader.ReadFields();
        myData.Rows.Add(row_data);
      }
    }
  }

Llame a esta función desde la función del controlador proporcionando la ruta del archivo de esta manera:

DataTable dataTable = new DataTable();
dataTable = ParseDataFromCSV("SampleCSVFile.csv");
dataGridView1.DataSource = dataTable;

La salida de este segmento de código también será la misma que las anteriores.

Salida del analizador de campos de texto

Los usuarios de C# pueden leer archivos CSV utilizando el TextFieldParser sencillo y fácil de usar. Ofrece técnicas y atributos que simplifican el análisis de archivos como archivos delimitados (CSV) y de ancho fijo.

No necesita usar ningún software de terceros, ya que ya está incluido de forma predeterminada en .NET Core 3.0+.

Artículo relacionado - Csharp CSV