Leer un archivo CSV en una tabla de datos en C#
-
Bibliotecas para leer un archivo CSV en una tabla de datos en
C#
-
Utilice GenericParser de Andrew Rissing para leer un archivo CSV y mostrarlo en una tabla de datos en
C#
-
Use CSV Reader de Sebastien Lorion para leer un archivo CSV y mostrarlo en una tabla de datos en
C#
-
Utilice el analizador de campos de texto para leer un archivo CSV y mostrarlo 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:
- Analizador genérico por Andrew Rissing
- Lector CSV de Sebastien Lorion
- 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:
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:
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:
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
.
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.
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:
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.
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+.