#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;
}