Trabajo con CSV en C# (.NET): bibliotecas y ejemplos de código

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): desde el análisis simple hasta la biblioteca avanzada



CSV (Comma-Separated Values) es uno de los formatos más comunes para el intercambio de datos tabulares. En el ecosistema .NET existen varios enfoques para trabajar con CSV: desde herramientas integradas hasta bibliotecas especializadas. En este artículo analizaremos todas las formas principales, mostraremos ejemplos de código y ayudaremos a elegir la herramienta óptima para su proyecto.



1. Herramientas integradas de .NET (análisis manual)

La forma más sencilla es usar las clases StreamReader y String.Split. Sin embargo, este método no tiene en cuenta el escape de comillas y comas dentro de los campos, por lo que solo es adecuado para archivos CSV simples sin datos complejos.



using System;using System.IO;using System.Linq;

public class SimpleCsvReader{ public static void ReadCsv(string filePath) { using (var reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); // Procesamiento de la línea Console.WriteLine(string.Join(" | ", values)); } } }}


Desventajas: no maneja comillas, no admite campos multilínea, no tiene tipificación.



2. Uso de TextFieldParser (Microsoft.VisualBasic)

La clase TextFieldParser del espacio de nombres Microsoft.VisualBasic.FileIO puede manejar correctamente CSV con comillas y delimitadores. Para usarlo, agregue una referencia al ensamblado Microsoft.VisualBasic.



using Microsoft.VisualBasic.FileIO;using System;

public class TextFieldParserExample{ public static void ParseCsv(string filePath) { using (var parser = new TextFieldParser(filePath)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true;

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


Este método ya es mejor, pero aún requiere mapeo manual de campos a objetos.



3. Biblioteca CsvHelper — el estándar de oro

CsvHelper es la biblioteca más popular para trabajar con CSV en .NET. Proporciona soporte completo para el estándar RFC 4180, mapeo automático a clases, soporte para LINQ y alto rendimiento.



Instalación

dotnet add package CsvHelper


Ejemplo de lectura de CSV a una lista de objetos

using CsvHelper;using CsvHelper.Configuration;using System.Globalization;using System.IO;using System.Linq;

public class Person{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public DateTime BirthDate { get; set; }}

public class CsvHelperReader{ public static List<Person> ReadPeople(string filePath) { using (var reader = new StreamReader(filePath)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { return csv.GetRecords<Person>().ToList(); } }}


Ejemplo de escritura de CSV desde una colección

public static void WritePeople(string filePath, List<Person> people){    using (var writer = new StreamWriter(filePath))    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))    {        csv.WriteRecords(people);    }}


Configuración avanzada

var config = new CsvConfiguration(CultureInfo.InvariantCulture){    HasHeaderRec                    

Recommendations