Saltar al pie de página
USANDO IRONXL

Cómo convertir un archivo CSV en una lista en C#

En este tutorial para principiantes, vamos a ver cómo leer archivos CSV en una lista en C# usando la biblioteca IronXL. Bueno, esta es una de las cosas más básicas que necesitas saber en cualquier lenguaje de programación, ya que los archivos CSV son una forma muy común de almacenar datos y transferirlos de un sistema o aplicación a otro. Cubriremos todo, desde la configuración de tu proyecto hasta el análisis de archivos CSV de manera efectiva.

Cómo convertir un archivo CSV en una lista en C

  1. Crea un Proyecto de Consola C# en Visual Studio.
  2. Instala la Biblioteca CSV de C# usando el Administrador de Paquetes NuGet.
  3. Carga el archivo CSV usando el método WorkBook.LoadCSV.
  4. Lee los valores de datos del archivo y llena la lista.
  5. Imprime la lista en la consola.

Configuración de su proyecto

Paso 1: Creación de un nuevo proyecto de C

  1. Abre Visual Studio: Inicia Visual Studio en tu computadora.
  2. Crea un Nuevo Proyecto: Haz clic en "Crear un nuevo proyecto". Esto abre una ventana donde puedes seleccionar el tipo de proyecto.
  3. Selecciona el Tipo de Proyecto: Elige "Aplicación de Consola (.NET Core)" como tu tipo de proyecto por simplicidad.
  4. Nombra Tu Proyecto: Nombra tu proyecto CSVFileReader.
  5. Elige la Ubicación: Selecciona una ubicación adecuada en tu dispositivo para guardar este proyecto.
  6. Genera el Proyecto: Haz clic en "Crear" para inicializar tu nuevo proyecto C#.

Paso 2: Instalación de la biblioteca IronXL

  1. Abre el Administrador de Paquetes NuGet: En Visual Studio, ve al menú "Herramientas", luego selecciona "Administrador de Paquetes NuGet" y elige "Administrar Paquetes NuGet para la Solución...".
  2. Busca IronXL: Haz clic en la pestaña "Explorar" y busca "IronXL.Excel."

Cómo Convertir un Archivo CSV en una Lista en C#: Figura 1 - IronXL

  1. Instala IronXL: Encuentra el paquete de IronXL en los resultados de búsqueda, selecciónalo y haz clic en "Instalar". Asegúrate de aceptar cualquier acuerdo de licencia y revisar los cambios.
  2. Verifica la Instalación: Después de la instalación, deberías ver IronXL referenciado en las referencias de tu proyecto.

Ahora, tu proyecto CSVFileReader está configurado con la biblioteca IronXL, y estás listo para comenzar a leer y procesar archivos CSV en C#. Esta configuración forma la base para las tareas de lectura de CSV que realizaremos en las secciones posteriores de este tutorial.

Análisis y procesamiento de archivos CSV en C

Con el proyecto configurado y la biblioteca IronXL instalada, enfoquémonos en analizar y procesar archivos CSV. Trabajaremos dentro del archivo Program.cs, que se genera automáticamente en tu proyecto CSVFileReader.

Paso 1: Especificación de la ruta del archivo

Antes de poder leer cualquier dato, necesitamos saber dónde está ubicado nuestro archivo CSV. Define una variable en el método Main para almacenar la ruta del archivo.

string filename = "csvfile.csv"; // Replace with your actual file path
string filename = "csvfile.csv"; // Replace with your actual file path
Dim filename As String = "csvfile.csv" ' Replace with your actual file path
$vbLabelText   $csharpLabel

Paso 2: Cargar el archivo CSV

IronXL hace que sea sencillo cargar un archivo CSV. Usa el método WorkBook.LoadCSV para leer el archivo CSV en un objeto WorkBook.

var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
$vbLabelText   $csharpLabel

Paso 3: Definición de una estructura de datos

Crea una clase que represente la estructura de datos en tu archivo CSV. Por ejemplo, si tu CSV contiene información sobre personas, define una clase Person como esta:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class
$vbLabelText   $csharpLabel

Paso 4: Análisis de datos CSV

En este paso, analizaremos el archivo CSV y llenaremos una List<Person> con los datos. Estamos usando IronXL para gestionar la lectura de CSV, y la clave es procesar correctamente cada fila o línea del CSV, teniendo en cuenta los encabezados y cualquier fila vacía potencial. Aquí tienes un desglose detallado del código:

List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets[0].Rows)
{
    if (isFirstRow)
    {
        isFirstRow = false; // Set the flag to false after skipping the first row
        continue;
    }
    if (row.IsEmpty) continue; // Skip empty rows
    var cells = row.ToArray();
    var person = new Person()
    {
        Name = cells[0].StringValue,
        Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
    };
    people.Add(person);
}
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets[0].Rows)
{
    if (isFirstRow)
    {
        isFirstRow = false; // Set the flag to false after skipping the first row
        continue;
    }
    if (row.IsEmpty) continue; // Skip empty rows
    var cells = row.ToArray();
    var person = new Person()
    {
        Name = cells[0].StringValue,
        Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
    };
    people.Add(person);
}
Dim people As New List(Of Person)()
Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
For Each row In csv.WorkSheets(0).Rows
	If isFirstRow Then
		isFirstRow = False ' Set the flag to false after skipping the first row
		Continue For
	End If
	If row.IsEmpty Then
		Continue For ' Skip empty rows
	End If
	Dim cells = row.ToArray()
	Dim person As New Person() With {
		.Name = cells(0).StringValue,
		.Age = Integer.Parse(cells(1).StringValue)
	}
	people.Add(person)
Next row
$vbLabelText   $csharpLabel

En este proceso de análisis, primero inicializamos una List<Person> para almacenar los datos analizados y usamos un indicador booleano isFirstRow para omitir la fila de encabezado del archivo CSV. El bucle foreach itera a través de cada fila del archivo CSV. Durante la primera iteración, la fila de encabezado se identifica y se omite, asegurando que solo se procesen las filas de datos. Luego verificamos cada fila para asegurarnos de que no esté vacía usando row.IsEmpty. Este paso es crítico para evitar errores de análisis con líneas vacías.

Para cada fila de datos, convertimos la fila en una matriz de celdas (row.ToArray()) y luego creamos un objeto Person con estos datos. Es crucial analizar y convertir correctamente los tipos de datos, como convertir la cadena 'Age' a un entero. El objeto Person analizado se agrega a nuestra lista people. Este enfoque asegura que solo se procesen y almacenen las filas de datos válidos, gestionando eficazmente problemas potenciales como cadenas no numéricas en columnas numéricas o filas vacías inesperadas.

Paso 5: Visualización de los datos

Después de analizar los datos CSV en nuestra List<Person>, el siguiente paso importante es mostrar y verificar los datos. Esto no solo ayuda a asegurar que nuestro análisis fue exitoso, sino que también nos permite observar la salida y realizar una verificación rápida de la calidad de los datos. Aquí tienes cómo puedes implementar esto:

foreach (var person in people)
{
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
foreach (var person in people)
{
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
For Each person In people
	Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
Next person
$vbLabelText   $csharpLabel

Aquí está el código completo de Program.cs:

using IronXL;
using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
{
    string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
    var csv = WorkBook.LoadCSV(filename);
    List<Person> people = new List<Person>();
    bool isFirstRow = true; // Add a flag to check for the first row
    foreach (var row in csv.WorkSheets[0].Rows)
    {
        if (isFirstRow)
        {
            isFirstRow = false; // Set the flag to false after skipping the first row
            continue;
        }
        if (row.IsEmpty) continue; // Skip empty rows
        var cells = row.ToArray();
        var person = new Person()
        {
            Name = cells[0].StringValue,
            Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
        };
        people.Add(person);
    }
    foreach (var person in people)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}
using IronXL;
using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
{
    string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
    var csv = WorkBook.LoadCSV(filename);
    List<Person> people = new List<Person>();
    bool isFirstRow = true; // Add a flag to check for the first row
    foreach (var row in csv.WorkSheets[0].Rows)
    {
        if (isFirstRow)
        {
            isFirstRow = false; // Set the flag to false after skipping the first row
            continue;
        }
        if (row.IsEmpty) continue; // Skip empty rows
        var cells = row.ToArray();
        var person = new Person()
        {
            Name = cells[0].StringValue,
            Age = int.Parse(cells[1].StringValue) // Ensure this is a numeric value
        };
        people.Add(person);
    }
    foreach (var person in people)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}
Imports IronXL
Imports System
Imports System.Collections.Generic

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main(ByVal args() As String)
	Dim filename As String = "C:\Users\tayya\Downloads\sample_data.csv" ' Replace with your actual file path
	Dim csv = WorkBook.LoadCSV(filename)
	Dim people As New List(Of Person)()
	Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
	For Each row In csv.WorkSheets(0).Rows
		If isFirstRow Then
			isFirstRow = False ' Set the flag to false after skipping the first row
			Continue For
		End If
		If row.IsEmpty Then
			Continue For ' Skip empty rows
		End If
		Dim cells = row.ToArray()
		Dim person As New Person() With {
			.Name = cells(0).StringValue,
			.Age = Integer.Parse(cells(1).StringValue)
		}
		people.Add(person)
	Next row
	For Each person In people
		Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
	Next person
	End Sub
$vbLabelText   $csharpLabel

Salida del Código

Cuando ejecutes el archivo, mostrará los datos de la lista en la consola:

Cómo Convertir un Archivo CSV en una Lista en C#: Figura 2 - Salida de Lista

Manejo de diferentes tipos de datos

Al manejar varios tipos de datos en un archivo CSV, es importante adaptar la lógica de análisis al tipo específico de cada columna de datos. En el ejemplo de la clase Person, mientras que el Name es una cadena y se puede asignar directamente usando StringValue, los campos numéricos como Age requieren conversión de cadena a entero usando Int32.Parse o Convert.ToInt32. Esto es esencial para evitar errores de incompatibilidad de tipos.

Para tipos de datos más complejos, como fechas, usa DateTime.Parse para convertir representaciones de cadenas de fechas en objetos DateTime. Es importante ser consciente del formato de fecha utilizado en tu archivo CSV y asegurarse de que coincida con el formato esperado en tu código. Los formatos de fecha inconsistentes pueden llevar a errores de análisis o interpretación incorrecta de datos.

Conclusión

Acabas de aprender cómo leer, analizar y mostrar los datos de un archivo CSV usando IronXL en C#. Este enfoque se puede emplear en diferentes tipos de estructuras de datos y formatos de archivo. Por lo tanto, esto representa una habilidad útil en general para todos los desarrolladores que recurren a C# como su lenguaje principal.

IronXL ofrece una prueba gratuita para que los usuarios experimenten sus características. Una vez concluido el período de prueba, la licencia para IronXL comienza con un precio inicial de $799.

Ten en cuenta que las excepciones y los casos extremos deben abordarse para escribir un código más robusto, especialmente al manejar diferentes tipos de datos y usar archivos grandes. Sigue experimentando y explorando más características de IronXL para mejorar el procesamiento de tus datos en C#. ¡Feliz programación!

Preguntas Frecuentes

¿Cómo puedo leer archivos CSV en una lista en C#?

Puedes leer archivos CSV en una lista en C# usando la biblioteca IronXL. Primero, crea un proyecto de consola C# en Visual Studio e instala IronXL a través del administrador de paquetes NuGet. Luego, usa el método WorkBook.LoadCSV para cargar el archivo CSV y analizar los datos en una lista.

¿Qué método uso para cargar un archivo CSV en C#?

Para cargar un archivo CSV en C#, usa el método WorkBook.LoadCSV de la biblioteca IronXL, que toma la ruta del archivo como su parámetro.

¿Cómo defino una estructura de datos para coincidir con el contenido de un archivo CSV?

Define una clase, como una clase 'Person', con propiedades que coincidan con las columnas de tu archivo CSV. Esto ayuda a estructurar los datos recuperados del CSV en un formato orientado a objetos.

¿Qué técnica se puede utilizar para saltar la fila de encabezado en un archivo CSV?

Para saltar la fila de encabezado, implementa una bandera booleana para verificar si la fila es la primera y salta su procesamiento continuando a la siguiente iteración.

¿Cómo puedo manejar filas vacías al analizar un archivo CSV en C#?

Utiliza las propiedades de fila de la biblioteca IronXL, como IsEmpty, para verificar las filas vacías y omitirlas durante el proceso de análisis.

¿Cuál es la importancia de manejar diferentes tipos de datos al procesar archivos CSV?

Manejar correctamente diferentes tipos de datos asegura que los datos se procesen con precisión y evita errores de tipo de incompatibilidad, especialmente al tratar con campos numéricos o de fecha.

¿Cuáles son algunos desafíos comunes asociados con el procesamiento de archivos CSV?

Los desafíos comunes incluyen manejar varios tipos de datos, omitir filas vacías o malformadas, y asegurar un análisis y procesamiento precisos de los datos sin errores.

¿Cuáles son las ventajas de usar una biblioteca para el procesamiento de archivos CSV en C#?

Usar la biblioteca IronXL para el procesamiento de CSV en C# simplifica la carga y el análisis de los archivos CSV con sus métodos intuitivos, permitiendo a los desarrolladores manejar datos de manera eficiente.

¿Qué pasos debo seguir para configurar un proyecto C# para la lectura de archivos CSV?

Comienza creando un proyecto de consola C# en Visual Studio, instala la biblioteca IronXL usando el administrador de paquetes NuGet y utiliza el método WorkBook.LoadCSV para cargar y analizar archivos CSV en una lista.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más