csv-helper

Cómo trabajar con CSV en C# con CsvHelper

CsvHelper es una biblioteca de C# que facilita la lectura y escritura de archivos CSV en aplicaciones .NET.

A estas alturas de la película Decir que un fichero CSV no es la mejor forma de almacenar datos, no es nada nuevo. Pero no todos los desarrolladores de programas deben estar enterados así que, de vez en cuando, nos va a tocar lidiar con ellos.

Cuando tengáis “esa suerte” (guiño guiño) de tener que trabajar con ficheros CSV desde una aplicación en .NET, CsvHelper a ser vuestro mejor amigo.

CsvHelper permite la serialización y deserialización de objetos a CSV. Además, gestiona automáticamente la detección de tipos de datos y el análisis sintáctico de cadenas de CSV.

También es compatible con tipos anónimos y DataReader, así como con LINQ para facilitar las operaciones de búsqueda y el filtrado de datos.

En definitiva, tiene todas las funcionalidades que vais a necesitar para trabajar con ficheros CSV. Motivo por el cuál es una de las librerías más populares para realizar esta tarea.

Cómo usar CsvHelper

Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.

Install-Package CsvHelper

Ahora, supongamos que tenemos una clase, por ejemplo

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

En este caso la lectura de un fichero CSV sería así de sencilla,

using (var reader = new StreamReader("path_a_tu_csv.csv"))

using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
	var records = csv.GetRecords<Person>();
}

Mientras que la escritura sería,

var Person = new List<Person>
{
	new Person { Id = 1, Name = "Adam", Age = 39 },
};

using (var writer = new StreamWriter("path_a_tu_csv.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
	csv.WriteRecords(records);
}

La librería es compatible con tipos anónimos, e incluso con tipos dinámicos. También proporciona un método para cargarlos como un DataTable, aunque el propio autor dice que ve innecesario su uso (yo también),

Como suele ser habitual en este tipo de librerías, dispone de diversas opciones. Especialmente para el mapeo de columnas y conversión de tipos. Consultad la documentación de la librería para más información.