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 CsvHelperEjemplo 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 También en la biblioteca
Spring Data JPA en Java: guía completa con ejemplos
Trabajo con Markdown en Kotlin: bibliotecas, análisis y generación
Generación de PDF en Java: resumen de las bibliotecas iText, Apache PDFBox, OpenPDF
Trabajo con XML en Rust: bibliotecas quick-xml, roxmltree y serde_xml_rs