Saltar al pie de página
USANDO IRONXL

Cómo leer archivos CSV con comas en los datos usando C#

Los archivos CSV parecen sencillos hasta que los datos contienen comas: de repente, "Smith, John" se convierte en dos campos separados, las direcciones se dividen en cada coma y los datos cuidadosamente estructurados se convierten en un caos. Mientras que los enfoques básicos String.Split(',') fallan con datos CSV del mundo real, IronXL ofrece una solución fiable que gestiona estas complejidades automáticamente.

Empiece con IronXL ahora.
green arrow pointer

¿Por qué las comas interrumpen el análisis de CSV?

Los archivos CSV (valores separados por comas) utilizan comas como delimitador entre los valores de las columnas, lo que crea un conflicto inherente cuando los propios datos contienen comas. La norma RFC 4180 aborda esta cuestión exigiendo que los campos que contengan comas vayan entre comillas dobles. Sin un tratamiento adecuado, una simple dirección como "123 Main St, Suite 400, New York" se divide en tres campos separados en lugar de permanecer como uno solo.

Los métodos tradicionales de análisis de CSV fallan porque no reconocen el contexto de las comas dentro de celdas entre comillas o valores de cadena. Un método de división básico aplicado a una cadena de caracteres no interpreta las comillas, lo que da lugar a datos tabulares dañados y estructuras de datos inválidas. Este problema afecta a innumerables escenarios empresariales: las direcciones de los clientes, las descripciones de productos, las cifras financieras y las importaciones de Excel contienen datos que suelen incluir comas. Incluso la documentación de Microsoft reconoce la complejidad del análisis sintáctico de CSV con caracteres especiales.

El problema se hace especialmente evidente cuando se trabaja con conjuntos de datos del mundo real. Piensa en un archivo CSV que contenga nombres de productos como "Martillo, 16 oz, cabeza de acero" o registros de clientes con nombres como "Johnson, Jr., Robert A.": estos patrones bloquean inmediatamente a los analizadores sintácticos ingenuos. Los datos financieros son otro escollo habitual: las cantidades monetarias formateadas con separadores de miles, como "1.234,56", parecen dos valores separados para una rutina simple de separación por comas.

Comprender por qué las comas interrumpen el análisis de CSV es el primer paso para elegir una solución que gestione correctamente el estándar de comillas RFC 4180. La biblioteca adecuada elimina la necesidad de soluciones manuales, expresiones regulares o analizadores sintácticos de máquinas de estados personalizados.

¿Cómo se instala la biblioteca CSV?

La instalación de IronXL se realiza en segundos a través del gestor de paquetes NuGet. Puede utilizar la Consola del Administrador de paquetes o la CLI de .NET :

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

Una vez instalada, la biblioteca estará disponible de inmediato en tu proyecto .NET 10. IronXL funciona de forma independiente sin necesidad de tener instalado Microsoft Office o Excel en el equipo host, lo que supone una ventaja fundamental para implementaciones en el lado del servidor y en la nube, donde no se dispone de licencias de Office.

Tras la instalación, añada el espacio de nombres IronXL a su archivo y ya estará listo para cargar datos CSV. La biblioteca está dirigida a .NET Framework 4.6.2 y versiones posteriores, además de todas las versiones de .NET Core, .NET 5, 6, 7, 8 y 10, lo que la hace compatible tanto con pilas de aplicaciones heredadas como modernas.

Verificación de la instalación

Después de añadir el paquete, comprueba que la instalación funciona ejecutando una prueba rápida de importación en tu proyecto. El paquete NuGet incluye todos los binarios nativos necesarios para Windows, Linux y macOS, por lo que no se requieren pasos de configuración adicionales. Para implementaciones basadas en Docker, el paquete resuelve automáticamente las dependencias nativas en la plataforma de destino.

¿Cómo lee la biblioteca los archivos CSV con comas incrustadas?

IronXL gestiona los caracteres especiales en datos CSV permitiéndole especificar la codificación del archivo y los delimitadores al cargar un archivo delimitado. La biblioteca IronXL detecta automáticamente y analiza correctamente los valores de cadenas entre comillas de acuerdo con los estándares RFC 4180, eliminando la necesidad de lógica de bucle personalizada o código de análisis manual.

El método principal para leer datos CSV es WorkBook.LoadCSV(), que acepta la ruta del archivo junto con parámetros opcionales para el formato de archivo, el delimitador y la codificación. Esta es la forma más sencilla de leer un archivo CSV con comas incrustadas:

using IronXL;

// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Save as Excel if needed
workbook.SaveAs("output.xlsx");
using IronXL;

// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Save as Excel if needed
workbook.SaveAs("output.xlsx");
Imports IronXL

' Load CSV with automatic comma handling
Dim workbook As WorkBook = WorkBook.LoadCSV("data.csv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:=",")

' Access the parsed data
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet

' Save as Excel if needed
workbook.SaveAs("output.xlsx")
$vbLabelText   $csharpLabel

El método LoadCSV gestiona de forma inteligente las comillas y las cadenas CSV, garantizando que el valor de cada columna permanezca intacto independientemente de las comas incrustadas. Para obtener más detalles sobre cómo trabajar con archivos CSV, consulta el tutorial oficial de análisis de CSV de IronXL.

Comprensión del resultado

Tras la carga, los datos CSV se asignan a un objeto WorkSheet, donde cada fila y columna se corresponde directamente con la estructura CSV original. Los campos entre comillas que contenían comas aparecen como valores de una sola celda, exactamente igual que en el archivo de origen.

La imagen siguiente muestra el archivo CSV original a la izquierda, comparado con el archivo Excel resultante a la derecha:

C# Leer CSV con comas en los datos con IronXL: Imagen 1 - El archivo CSV original (izquierda) frente al archivo Excel de salida (derecha)

Acceso a los datos de las celdas tras el análisis

Una vez que el CSV se ha cargado en un WorkBook, se accede a los datos de las celdas a través del objeto WorkSheet utilizando la indexación de filas y columnas. Cada celda expone accesores tipados como StringValue, DecimalValue y IntValue, por lo que no es necesario realizar conversiones de tipo manuales para los tipos de datos comunes.

¿Cómo se analizan archivos CSV con comas paso a paso?

El siguiente ejemplo completo muestra cómo IronXL gestiona los valores separados por comas cuando los propios campos de datos contienen comas. Este ejemplo crea un archivo CSV de muestra en memoria, lo escribe en el disco, lo analiza con IronXL y muestra el valor de cada campo:

using IronXL;
using System;
using System.IO;

// Create sample CSV content with embedded commas
string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""
""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99""";

// Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent);

// Load CSV with IronXL -- commas inside quoted fields are handled automatically
WorkBook workbook = WorkBook.LoadCSV("sample.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

WorkSheet ws = workbook.DefaultWorkSheet;

// Read and display each parsed row
foreach (var row in ws.Rows)
{
    if (row.RowNumber == 0) continue; // Skip header row

    string name        = row.Columns[0].StringValue;
    string address     = row.Columns[1].StringValue;
    string description = row.Columns[2].StringValue;
    decimal price      = row.Columns[3].DecimalValue;

    Console.WriteLine($"Customer:    {name}");
    Console.WriteLine($"Address:     {address}");
    Console.WriteLine($"Description: {description}");
    Console.WriteLine($"Price:       ${price:N2}");
    Console.WriteLine();
}

// Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx");
Console.WriteLine("Data exported to parsed_data.xlsx");
using IronXL;
using System;
using System.IO;

// Create sample CSV content with embedded commas
string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""
""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99""";

// Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent);

// Load CSV with IronXL -- commas inside quoted fields are handled automatically
WorkBook workbook = WorkBook.LoadCSV("sample.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

WorkSheet ws = workbook.DefaultWorkSheet;

// Read and display each parsed row
foreach (var row in ws.Rows)
{
    if (row.RowNumber == 0) continue; // Skip header row

    string name        = row.Columns[0].StringValue;
    string address     = row.Columns[1].StringValue;
    string description = row.Columns[2].StringValue;
    decimal price      = row.Columns[3].DecimalValue;

    Console.WriteLine($"Customer:    {name}");
    Console.WriteLine($"Address:     {address}");
    Console.WriteLine($"Description: {description}");
    Console.WriteLine($"Price:       ${price:N2}");
    Console.WriteLine();
}

// Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx");
Console.WriteLine("Data exported to parsed_data.xlsx");
Imports IronXL
Imports System
Imports System.IO

' Create sample CSV content with embedded commas
Dim csvContent As String = "Name,Address,Description,Price" & vbCrLf &
    """Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""" & vbCrLf &
    """Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""" & vbCrLf &
    """Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99"""

' Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent)

' Load CSV with IronXL -- commas inside quoted fields are handled automatically
Dim workbook As WorkBook = WorkBook.LoadCSV("sample.csv",
    fileFormat:=ExcelFileFormat.XLSX,
    listDelimiter:=",")

Dim ws As WorkSheet = workbook.DefaultWorkSheet

' Read and display each parsed row
For Each row In ws.Rows
    If row.RowNumber = 0 Then Continue For ' Skip header row

    Dim name As String = row.Columns(0).StringValue
    Dim address As String = row.Columns(1).StringValue
    Dim description As String = row.Columns(2).StringValue
    Dim price As Decimal = row.Columns(3).DecimalValue

    Console.WriteLine($"Customer:    {name}")
    Console.WriteLine($"Address:     {address}")
    Console.WriteLine($"Description: {description}")
    Console.WriteLine($"Price:       ${price:N2}")
    Console.WriteLine()
Next

' Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx")
Console.WriteLine("Data exported to parsed_data.xlsx")
$vbLabelText   $csharpLabel

Este ejemplo muestra varias capacidades clave:

  • Gestión automática de comillas: campos como "Johnson, Mark" mantienen su integridad a pesar de contener comas dentro de los datos CSV.
  • Comas anidadas: IronXL analiza correctamente múltiples campos que contienen comas dentro de la misma fila sin pérdida de datos entre columnas.
  • Conversión de tipos: Los accesores tipados, como StringValue y DecimalValue, simplifican el acceso a valores individuales sin necesidad de análisis sintáctico manual.
  • Exportación a Excel: puede convertir archivos CSV a formato Excel directamente en el mismo flujo de trabajo para mejorar la funcionalidad y el intercambio de datos.

La imagen siguiente muestra el archivo CSV de ejemplo a la izquierda comparado con el resultado analizado en Excel a la derecha:

C# Leer CSV con comas en los datos con IronXL: Imagen 2 - El archivo CSV de ejemplo (izquierda) frente al resultado analizado en Excel (derecha)

¿Qué funciones avanzadas de CSV están disponibles?

Más allá del manejo básico de las comas, IronXL ofrece un conjunto completo de capacidades de procesamiento de CSV. Cuando se necesitan diferentes delimitadores, codificaciones de caracteres o un manejo de errores listo para producción, la biblioteca ofrece opciones flexibles:

using IronXL;
using System;
using System.Text;

// Custom delimiter support -- semicolon-delimited files common in European locales
WorkBook semicolonData = WorkBook.LoadCSV("data.txt",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");

// Handle UTF-8 encoding for international CSV files
WorkBook internationalData = WorkBook.LoadCSV("international.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",",
    encoding: Encoding.UTF8);

// Tab-delimited files (TSV format)
WorkBook tsvData = WorkBook.LoadCSV("export.tsv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: "\t");

// Production-ready error handling for CSV with commas in data
try
{
    WorkBook data = WorkBook.LoadCSV("file.csv",
        fileFormat: ExcelFileFormat.XLSX,
        listDelimiter: ",");

    WorkSheet sheet = data.DefaultWorkSheet;

    Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.");
}
catch (Exception ex)
{
    Console.WriteLine($"CSV parsing error: {ex.Message}");
    // Log and implement appropriate recovery logic
}
using IronXL;
using System;
using System.Text;

// Custom delimiter support -- semicolon-delimited files common in European locales
WorkBook semicolonData = WorkBook.LoadCSV("data.txt",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");

// Handle UTF-8 encoding for international CSV files
WorkBook internationalData = WorkBook.LoadCSV("international.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",",
    encoding: Encoding.UTF8);

// Tab-delimited files (TSV format)
WorkBook tsvData = WorkBook.LoadCSV("export.tsv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: "\t");

// Production-ready error handling for CSV with commas in data
try
{
    WorkBook data = WorkBook.LoadCSV("file.csv",
        fileFormat: ExcelFileFormat.XLSX,
        listDelimiter: ",");

    WorkSheet sheet = data.DefaultWorkSheet;

    Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.");
}
catch (Exception ex)
{
    Console.WriteLine($"CSV parsing error: {ex.Message}");
    // Log and implement appropriate recovery logic
}
Imports IronXL
Imports System
Imports System.Text

' Custom delimiter support -- semicolon-delimited files common in European locales
Dim semicolonData As WorkBook = WorkBook.LoadCSV("data.txt",
    fileFormat:=ExcelFileFormat.XLSX,
    listDelimiter:=";")

' Handle UTF-8 encoding for international CSV files
Dim internationalData As WorkBook = WorkBook.LoadCSV("international.csv",
    fileFormat:=ExcelFileFormat.XLSX,
    listDelimiter:=",",
    encoding:=Encoding.UTF8)

' Tab-delimited files (TSV format)
Dim tsvData As WorkBook = WorkBook.LoadCSV("export.tsv",
    fileFormat:=ExcelFileFormat.XLSX,
    listDelimiter:=vbTab)

' Production-ready error handling for CSV with commas in data
Try
    Dim data As WorkBook = WorkBook.LoadCSV("file.csv",
        fileFormat:=ExcelFileFormat.XLSX,
        listDelimiter:=",")

    Dim sheet As WorkSheet = data.DefaultWorkSheet

    Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.")
Catch ex As Exception
    Console.WriteLine($"CSV parsing error: {ex.Message}")
    ' Log and implement appropriate recovery logic
End Try
$vbLabelText   $csharpLabel

IronXL admite varios delimitadores (barras verticales, tabulaciones, punto y coma y cualquier carácter único), gestiona múltiples codificaciones de caracteres y procesa archivos de cualquier tamaño de forma eficiente. Para gestionar escenarios de datos complejos, explore las funciones de manipulación de datos y las funciones Enterprise, como la gestión de archivos protegidos con contraseña y el cálculo de fórmulas.

Trabajar con diferentes formatos de delimitadores

Muchos sistemas exportan datos utilizando delimitadores distintos de las comas. Las aplicaciones de la configuración regional europea suelen utilizar puntos y comas, ya que el separador decimal en esas regiones es la propia coma. Los archivos delimitados por barras verticales son habituales en sistemas heredados y en las exportaciones de almacenes de datos. IronXL gestiona todo esto a través del parámetro listDelimiter, por lo que puedes cambiar de formato con un simple cambio de carácter en lugar de reescribir tu lógica de análisis.

Manejo de la codificación y los caracteres internacionales

Los problemas de codificación de caracteres provocan una corrupción sutil de los datos que resulta difícil de detectar. Cuando los archivos CSV contienen caracteres no ASCII (letras acentuadas, caracteres CJK o símbolos monetarios), especificar la codificación correcta evita que el resultado se vea distorsionado. IronXL acepta cualquier instancia de System.Text.Encoding, incluyendo UTF-8, UTF-16, Latin-1 y codificaciones específicas de cada plataforma.

¿Por qué una biblioteca especializada supera al análisis manual de CSV?

IronXL funciona de forma independiente sin dependencias de Microsoft Office, por lo que es ideal para implementaciones de servidor y aplicaciones en la nube. A diferencia de las soluciones que requieren Office Interop, IronXL se ejecuta en Windows, Linux y macOS, y es compatible con .NET Framework 4.6.2+ y .NET Core/5/6/7/8/10+.

La biblioteca elimina los errores comunes de análisis sintáctico de CSV mediante la gestión inteligente de casos extremos que rompen los analizadores sintácticos más sencillos. La siguiente tabla compara los enfoques más comunes:

Enfoques de análisis de CSV en C# -- Comparación
Acercarse Maneja las comas entre comillas Compatibilidad con codificaciones exportar a Excel Listo para producción
String.Split(',') No No No No
TextFieldParser (VB) Limitado No Parcial
CsvHelper (OSS) No
IronXL

Tanto si procesa informes financieros con formato de moneda, datos de clientes con caracteres internacionales o registros del sistema con caracteres especiales, IronXL mantiene la integridad de los datos durante todo el proceso de análisis. Según los debates de Stack Overflow, el manejo de las comas dentro de los campos CSV es uno de los retos de análisis sintáctico más frecuentes, y IronXL lo aborda directamente.

Características de rendimiento

IronXL procesa grandes archivos CSV sin cargar el archivo completo en la memoria de una sola vez, lo que lo hace adecuado para procesar archivos con millones de filas. El diseño de la biblioteca, que optimiza el uso de la memoria, permite ejecutar tareas de análisis de CSV en instancias de servidor estándar sin necesidad de aprovisionar RAM adicional para grandes cargas de datos.

En cuanto al cálculo de fórmulas y el estilo de las celdas, IronXL mantiene la compatibilidad total con Excel al convertir datos CSV al formato .xlsx. Esto es importante cuando los usuarios finales esperan un resultado en formato Excel en lugar de datos tabulares sin procesar.

Flexibilidad de implementación

Dado que IronXL no depende de Microsoft Office, puede implementarse en cualquier entorno que ejecute .NET, incluidos contenedores Linux, Azure Functions, AWS Lambda y Windows Server local. Para entornos de producción, IronXL ofrece la fiabilidad y la estructura de soporte que exigen las aplicaciones empresariales, respaldadas por Professional License y actualizaciones continuas.

¿Cuándo se debe elegir una biblioteca de hojas de cálculo con todas las funciones?

La elección de la biblioteca CSV adecuada depende de tus requisitos específicos. IronXL es la mejor opción cuando se necesita cualquier combinación de las siguientes capacidades:

  • Lectura de archivos CSV que deben convertirse al formato Excel para su presentación en informes o distribución
  • Procesamiento de archivos CSV internacionales con caracteres no ASCII o codificaciones multibyte
  • Creación de aplicaciones que funcionen en Windows, Linux y macOS sin código específico para cada plataforma
  • Evitar las dependencias de Microsoft Office Interop en entornos de servidor o en la nube
  • Acceso a funciones adicionales de la hoja de cálculo, como el formato de celdas, los rangos con nombre y las fórmulas

Para escenarios sencillos en los que solo se necesita analizar CSV y nada más, puede ser suficiente una biblioteca diseñada específicamente solo para CSV. Sin embargo, cuando el análisis de CSV es un paso dentro de un proceso de procesamiento de datos más amplio que incluye la exportación a Excel, IronXL elimina la necesidad de múltiples dependencias.

La referencia de la API de la biblioteca documenta en detalle todos los métodos y parámetros disponibles, lo que facilita el descubrimiento de capacidades más allá de la carga básica de CSV. La sección de tutoriales ofrece guías paso a paso para flujos de trabajo habituales, como el análisis de archivos CSV, la manipulación de celdas y la conversión de formatos de archivo.

¿Cómo empezar con una prueba gratuita?

Leer archivos CSV con comas incrustadas en C# no tiene por qué ser complicado. IronXL transforma este reto en código limpio y fiable. Al gestionar automáticamente las comillas dobles, las comas y las celdas entre comillas, te permite centrarte en la lógica de la aplicación en lugar de en los casos extremos del análisis de CSV.

Los pasos para empezar son sencillos:

  1. Instala el paquete NuGet con dotnet add package IronXL
  2. Llama a WorkBook.LoadCSV() con la ruta de tu archivo y el delimitador
  3. Recorrer filas y columnas utilizando accesores tipados
  4. Opcionalmente, exportar a .xlsx con workbook.SaveAs()

Empiece con una prueba gratuita para probar IronXL en su entorno antes de adquirir una licencia. La versión de prueba te ofrece acceso completo a todas las funciones durante 30 días. Cuando esté listo para la implementación en producción, adquiera una licencia que se adapte a su escala de implementación; hay opciones disponibles para desarrolladores individuales, equipos pequeños y uso a nivel de toda la empresa.

Preguntas Frecuentes

¿Cómo puedo manejar las comas en los datos al leer archivos CSV en C#?

IronXL ofrece una solución robusta para leer archivos CSV con comas incrustadas. Gestiona automáticamente los campos entrecomillados y los caracteres especiales, garantizando que sus datos permanezcan intactos sin dividirse en las comas.

¿Por qué String.Split(',') falla con archivos CSV que contienen comas?

El método String.Split(',') trata cada coma como un delimitador, lo que resulta problemático cuando los propios campos de datos contienen comas. IronXL lo supera analizando de forma inteligente los archivos CSV, reconociendo los campos entrecomillados y manteniendo la integridad de los datos.

¿Cuál es la ventaja de utilizar IronXL para el análisis sintáctico de CSV en C#?

IronXL simplifica el proceso de análisis sintáctico de archivos CSV gestionando automáticamente situaciones complejas como comas incrustadas y campos entrecomillados, lo que ahorra tiempo a los desarrolladores y reduce los posibles errores en el procesamiento de datos.

¿Puede IronXL manejar otros caracteres especiales en archivos CSV?

Sí, IronXL está diseñado para gestionar caracteres especiales y campos entrecomillados, lo que garantiza un análisis preciso incluso de los archivos CSV más complejos.

¿Es IronXL adecuado para archivos CSV de gran tamaño?

IronXL puede manejar eficazmente archivos CSV de gran tamaño, procesándolos de forma rápida y precisa gracias a sus capacidades optimizadas de análisis sintáctico.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame