es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leer archivos CSV sin encabezado utilizando CSVHelper.

Tengo muchos archivos CSV sin encabezado y necesito leerlos en C#. Manualmente agregué un encabezado a uno de estos archivos y con el siguiente código utilizando CSVHelper puedo leer los archivos y mostrarlos en un GridView.

Ahora mi pregunta es, ¿cómo puedo leer estos archivos sin un encabezado? ¿O cómo puedo agregar un encabezado (un nuevo registro) utilizando CSVHelper en la primera línea?

public Form1()
{
    InitializeComponent();
    List<festival> records;
    var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";" };
    using (var reader = new StreamReader(@"File8.csv"))
    using (var csv = new CsvReader(reader, config))
    {
        records = csv.GetRecords<festival>().ToList();
    }

    dataGridView1.DataSource = records;
}

Clase

public class Festival
{
    public string Day { get; set; }
    public string Start { get; set; }
    public int Lenght { get; set; }
    public string FilmName { get; set; }
    public float Rating { get; set; }
}

Ejemplo de CSV

csv
Mi;22:15;110;A;8
Mi;19:00;106;B;8
Mi;19:15;97;C;8.2

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para leer un archivo CSV sin encabezado en C# utilizando CSVHelper, puedes definir un ClassMap que mapee los nombres de las columnas a las propiedades de tu objeto. En este caso, puedes crear un ClassMap personalizado para tu clase Festival de la siguiente manera:

    public sealed class FestivalMap : ClassMap<festival>
    {
        public FestivalMap()
        {
            Map(f => f.Día).Index(0);
            Map(f => f.Comienzo).Index(1);
            Map(f => f.Duración).Index(2);
            Map(f => f.NombrePelicula).Index(3);
            Map(f => f.Calificación).Index(4);
        }
    }
    

    Luego, en tu código, puedes usar esta clase de mapeo en lugar de depender de la información del encabezado:

    public Form1()
    {
        InitializeComponent();
    
        var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";" };
        config.RegisterClassMap<festivalmap>();
    
        List<festival> registros;
        using (var lector = new StreamReader(@"Archivo8.csv"))
        using (var csv = new CsvReader(lector, config))
        {
            registros = csv.GetRecords<festival>().ToList();
        }
    
        dataGridView1.DataSource = registros;
    }
    

    Esto te permitirá leer los archivos CSV incluso sin una fila de encabezado.

    Si deseas agregar una fila de encabezado a tu archivo, puedes escribirlo utilizando un CsvWriter y luego anexar el resto del archivo. Aquí tienes un ejemplo:

    using (var escritor = new StreamWriter(@"Archivo8.csv"))
    using (var csv = new CsvWriter(escritor, config))
    {
        csv.WriteHeader<festival>();
        csv.NextRecord(); // Avanzar al siguiente registro
    
        // Escribe el resto del archivo (asumiendo que está en una List<string>)
        foreach (var linea in lineas)
        {
            escritor.WriteLine(linea);
        }
    }
    

    Esto creará un nuevo archivo con una fila de encabezado que coincida con las propiedades de tu clase Festival. Luego puedes anexar el resto de tus datos CSV a este archivo.

Comments are closed.