Trabajo con CSV en C# (.NET): bibliotecas y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con CSV en C# (.NET): resumen de herramientas y ejemplos

CSV (Comma-Separated Values) es uno de los formatos más comunes para el intercambio de datos tabulares. En el ecosistema de C# (.NET) existen varias formas fiables de trabajar con este formato: desde herramientas integradas hasta potentes bibliotecas de terceros. En este artículo, revisaremos los enfoques principales y las mejores prácticas.



¿Por qué no deberías escribir un analizador CSV manualmente?

El formato CSV parece simple a primera vista, pero en la práctica contiene muchos matices: escape de comillas, comas dentro de los campos, diferentes delimitadores, caracteres de nueva línea en los valores. El uso de bibliotecas preparadas elimina dolores de cabeza y el manejo de casos extremos.



Biblioteca CsvHelper: el estándar de oro

CsvHelper es la biblioteca más popular para trabajar con CSV en .NET. Admite mapeo a clases POCO, lectura en streaming, configuración de delimitadores y codificaciones.

Instalación a través de NuGet:

Install-Package CsvHelper


Ejemplo de lectura de CSV a una lista de objetos

using CsvHelper;using System.Globalization;

public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; }}

var users = new List<User>();using (var reader = new StreamReader("users.csv"))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){ users = csv.GetRecords<User>().ToList();}


Ejemplo de escritura de CSV desde una colección

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


Analizador integrado: TextFieldParser (Microsoft.VisualBasic)

Si no deseas agregar dependencias externas, en .NET existe el TextFieldParser integrado del espacio de nombres Microsoft.VisualBasic.FileIO. Está disponible en .NET Framework y .NET Core/.NET 5+ (requiere instalar el paquete Microsoft.VisualBasic).



Ejemplo de uso de TextFieldParser

using Microsoft.VisualBasic.FileIO;

using (var parser = new TextFieldParser("data.csv")){ parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true;

while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); }}

Ventajas: no requiere bibliotecas de terceros. Desventajas: menos flexible que CsvHelper, no tiene mapeo automático a clases.



Trabajo con archivos grandes: procesamiento en streaming

Al trabajar con archivos CSV de más de 100 MB, es importante evitar cargar todo el archivo en memoria. Ambas bibliotecas admiten procesamiento en streaming:

  • CsvHelper — usa GetRecords<T>() en un bucle foreach sin llamar a .ToList().
  • TextFieldParser — lee línea por línea, lo que también es eficiente.


Ejemplo de lectura en streaming con CsvHelper

using (var reader = new StreamReader("large.csv"))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){    foreach (var record in csv.GetRecords<User>())    {        ProcessUser(record); // procesamos uno por uno    }}


Manejo de errores y validación de datos

Al importar CSV, los datos pueden ser incorrectos. CsvHelper permite configurar el manejo de errores mediante eventos:

csv.Configuration.BadDataFound = context =>{    Console.WriteLine($"Error en la línea {context.RawRow}: {context.RawRecord}");};

También se pueden usar atributos para la validación de campos:

public class Product{    [Name("ProductId")]    public int Id { get; set; }        [Required]    public string Nam                    

Recommendations