C# Programming

Escritura eficiente de archivos CSV en C#

Spread the love

Los archivos de Valores Separados por Comas (CSV) son un formato ubicuo para almacenar datos tabulares. Su simplicidad los hace fácilmente accesibles, pero su manejo programático requiere una consideración cuidadosa. Este artículo explora dos enfoques distintos en C# para escribir datos en archivos CSV: aprovechar la robusta biblioteca CsvHelper y emplear el método integrado File.WriteAllText(). Cada enfoque ofrece ventajas únicas, haciendo que la elección óptima dependa de la complejidad de los datos y los requisitos del proyecto.

Tabla de contenido

Escribir en CSV usando CsvHelper

La biblioteca CsvHelper ofrece una solución potente y flexible para manejar archivos CSV en C#. Su gestión eficiente de comillas, escapes y varios delimitadores la hace ideal para conjuntos de datos complejos. Comience instalando el paquete NuGet CsvHelper a través de su gestor de paquetes preferido (por ejemplo, NuGet Package Manager en Visual Studio).


using CsvHelper;
using CsvHelper.Configuration;
using System;
using System.Globalization;
using System.IO;
using System.Collections.Generic;

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

public class CsvHelperExample
{
    public static void Main(string[] args)
    {
        List<Person> people = new List<Person>()
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Jane", LastName = "Doe", Age = 25 },
            new Person { FirstName = "Peter", LastName = "Jones", Age = 40 }
        };

        string filePath = "output.csv";

        using (var writer = new StreamWriter(filePath))
        using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
        {
            csv.WriteRecords(people);
        }

        Console.WriteLine($"Datos escritos en {filePath}");
    }
}

Este ejemplo muestra la simplicidad de escribir una lista de objetos Person en un archivo CSV. CultureInfo.InvariantCulture asegura un formato consistente independientemente de la configuración del sistema. Las instrucciones using garantizan la eliminación adecuada de los recursos.

Escribir en CSV usando WriteAllText()

Para conjuntos de datos más pequeños y menos intrincados, el método File.WriteAllText() proporciona un enfoque sencillo. Sin embargo, este método requiere el manejo manual de comas y comillas, lo que puede volverse engorroso con datos que contienen estos caracteres dentro de los campos.


using System;
using System.IO;
using System.Text;

public class WriteAllTextExample
{
    public static void Main(string[] args)
    {
        string[,] data = {
            {"FirstName", "LastName", "Age"},
            {"John", "Doe", "30"},
            {"Jane", "Doe", "25"},
            {"Peter", "Jones", "40"}
        };

        StringBuilder csvBuilder = new StringBuilder();
        for (int i = 0; i < data.GetLength(0); i++)
        {
            for (int j = 0; j < data.GetLength(1); j++)
            {
                csvBuilder.Append(data[i, j]);
                if (j < data.GetLength(1) - 1)
                {
                    csvBuilder.Append(",");
                }
            }
            csvBuilder.AppendLine();
        }

        string filePath = "output_simple.csv";
        File.WriteAllText(filePath, csvBuilder.ToString());

        Console.WriteLine($"Datos escritos en {filePath}");
    }
}

Este código construye la cadena CSV manualmente y la escribe en el archivo. Si bien es funcional para casos simples, carece de la robustez de CsvHelper para datos complejos, requiriendo un manejo extenso de caracteres especiales para evitar la corrupción de datos.

Elegir el método adecuado

La selección entre estos métodos depende completamente de las necesidades específicas del proyecto. Para conjuntos de datos grandes o complejos con el potencial de caracteres especiales dentro de los campos, se recomienda encarecidamente CsvHelper debido a su robusto manejo de errores y su eficiente gestión de datos. Para conjuntos de datos muy simples, File.WriteAllText() puede ser suficiente, pero sus limitaciones deben considerarse cuidadosamente. Recuerde incorporar siempre un manejo de errores adecuado (por ejemplo, bloques try-catch) para gestionar posibles excepciones como IOException en entornos de producción.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *