Trabajo con CSV en C++: bibliotecas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con CSV en C++: resumen de bibliotecas y ejemplos prácticos



CSV (Valores Separados por Comas) es uno de los formatos más populares para almacenar datos tabulares. En C++ no hay soporte incorporado para CSV, sin embargo, existen muchas bibliotecas y enfoques para leer, escribir y procesar dichos archivos. En este artículo, revisaremos las principales formas de trabajar con CSV en C++, incluyendo las bibliotecas populares libcsv y rapidcsv, así como la implementación de un analizador utilizando herramientas estándar.



¿Por qué es importante CSV para C++?

CSV se utiliza para el intercambio de datos entre sistemas, exportación desde bases de datos, aprendizaje automático y cálculos científicos. En C++, el trabajo con CSV a menudo se requiere en aplicaciones para procesar registros, configuraciones o importar datos desde Excel. La elección correcta de una biblioteca acelera el desarrollo y mejora la confiabilidad del código.



Biblioteca libcsv

libcsv es una biblioteca ligera en C que es perfecta para proyectos de C++. Admite el análisis de CSV con delimitadores personalizables, escape de caracteres y manejo de errores.

  • Soporte para varios delimitadores (coma, punto y coma, tabulación).
  • Trabajo con cadenas escapadas y comillas.
  • Consumo mínimo de memoria.

Ejemplo de lectura de CSV con libcsv:

#include <csv.h>#include <iostream>#include <vector>#include <string>

struct csv_state { std::vector<std::vector<std::string>> rows;};

void cb1(void *s, size_t len, void *data) { auto *state = static_cast<csv_state*>(data); state->rows.back().push_back(std::string(static_cast<char*>(s), len));}

void cb2(int c, void *data) { auto *state = static_cast<csv_state*>(data); state->rows.emplace_back();}

int main() { struct csv_parser p; csv_init(&p, CSV_STRICT); csv_set_delim(&p, ',');

csv_state state; state.rows.emplace_back();

const char *input = "Name,Age,CityAlice,30,New YorkBob,25,London"; csv_parse(&p, input, strlen(input), cb1, cb2, &state); csv_fini(&p, cb1, cb2, &state);

for (auto &row : state.rows) { for (auto &col : row) { std::cout << col << " "; } std::cout << std::endl; }

csv_free(&p); return 0;}


Biblioteca rapidcsv

rapidcsv es una biblioteca moderna de C++ con una interfaz conveniente. Admite lectura y escritura de CSV, detección automática de tipos de datos y trabajo con encabezados.

  • API simple basada en contenedores STL.
  • Conversión automática de cadenas a números.
  • Soporte para delimitadores y codificaciones personalizadas.

Ejemplo de escritura y lectura de CSV con rapidcsv:

#include <rapidcsv.h>#include <iostream>

int main() { // Escritura CSV rapidcsv::Document doc("", rapidcsv::LabelParams(0, 0)); doc.SetCell<std::string>(0, 0, "Product"); doc.SetCell<int>(1, 0, 2023); doc.SetCell<double>(2, 0, 99.99); doc.Save("data.csv");

// Lectura CSV rapidcsv::Document docRead("data.csv"); std::string product = docRead.GetCell<std::string>(0, 0); int year = docRead.GetCell<int>(1, 0); double price = docRead.GetCell<double>(2, 0);

std::cout << "Product: " << product << ", Year: " << year << ", Price: " << price << std::endl; return 0;}


Trabajo con CSV mediante herramientas estándar de C++

Si no desea incluir bibliotecas externas, puede implementar un analizador usando std::stringstream y std::getline. Esto es adecuado para CSV simples sin escape.

#include <iostream>#include <fstream>#include <sstrea                    

Recommendations