Arbeiten mit CSV in C++: Bibliotheken und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit CSV in C++: Überblick über Bibliotheken und praktische Beispiele



CSV (Comma-Separated Values) ist eines der beliebtesten Formate zur Speicherung von Tabellendaten. C++ bietet keine integrierte Unterstützung für CSV, jedoch gibt es zahlreiche Bibliotheken und Ansätze zum Lesen, Schreiben und Verarbeiten solcher Dateien. In diesem Artikel betrachten wir die wichtigsten Methoden zur Arbeit mit CSV in C++, einschließlich der beliebten Bibliotheken libcsv und rapidcsv, sowie die Implementierung eines Parsers mit Standardmitteln.



Warum ist CSV für C++ wichtig?

CSV wird für den Datenaustausch zwischen Systemen, den Export aus Datenbanken, maschinelles Lernen und wissenschaftliche Berechnungen verwendet. In C++ wird die Arbeit mit CSV häufig in Anwendungen zur Verarbeitung von Logs, Konfigurationen oder zum Import von Daten aus Excel benötigt. Die richtige Wahl der Bibliothek beschleunigt die Entwicklung und erhöht die Zuverlässigkeit des Codes.



Die Bibliothek libcsv

libcsv ist eine leichtgewichtige C-Bibliothek, die sich hervorragend für C++-Projekte eignet. Sie unterstützt das Parsen von CSV mit konfigurierbaren Trennzeichen, Zeichenescaping und Fehlerbehandlung.

  • Unterstützung verschiedener Trennzeichen (Komma, Semikolon, Tabulator).
  • Arbeit mit escaped Strings und Anführungszeichen.
  • Minimaler Speicherverbrauch.

Beispiel zum Lesen von CSV mit 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;}


Die Bibliothek rapidcsv

rapidcsv ist eine moderne C++-Bibliothek mit einer benutzerfreundlichen Oberfläche. Sie unterstützt das Lesen und Schreiben von CSV, die automatische Erkennung von Datentypen und die Arbeit mit Kopfzeilen.

  • Einfache API basierend auf STL-Containern.
  • Automatische Konvertierung von Strings in Zahlen.
  • Unterstützung für benutzerdefinierte Trennzeichen und Kodierungen.

Beispiel zum Schreiben und Lesen von CSV mit rapidcsv:

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

int main() { // CSV schreiben 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");

// CSV lesen 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;}


Arbeiten mit CSV über Standard-C++-Mittel

Wenn Sie keine externen Bibliotheken einbinden möchten, können Sie einen Parser mit std::stringstream und std::getline implementieren. Dies eignet sich für einfache CSV-Dateien ohne Escaping.

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

Empfehlungen