csv

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>

struct CSVRow {
    std::vector<std::string> columns;

    std::string& operator[](std::size_t index) {
        return columns[index];
    }

    std::size_t size() const {
        return columns.size();
    }
};

class CSVReader {
public:
    CSVReader(const std::string& filename, char delimiter = ',') : filename(filename), delimiter(delimiter) {}

    std::vector<CSVRow> readRows() {
        std::ifstream file(filename);
        std::vector<CSVRow> rows;

        if (file.is_open()) {
            std::string line;
            while (std::getline(file, line)) {
                std::stringstream ss(line);
                CSVRow row;
                std::string cell;

                while (std::getline(ss, cell, delimiter)) {
                    row.columns.push_back(cell);
                }

                rows.push_back(row);
            }

            file.close();
        }

        return rows;
    }

private:
    std::string filename;
    char delimiter;
};

int main() {
    const std::string csvFilename = "example.csv";
    CSVReader csvReader(csvFilename);

    std::vector<CSVRow> rows = csvReader.readRows();

    for (const auto& row : rows) {
        for (std::size_t i = 0; i < row.size(); ++i) {
            std::cout << "Column " << i << ": " << row[i] << "\t";
        }
        std::cout << std::endl;
    }

    return 0;
}