Parse CSV string data into a flat matrix in row-major format (A11, A12, A13, A21, ...).
The number of rows and columns is determined automatically.
#include <string_view>
#include <vector>
#include <iostream>
#include <cstdlib>
#include <fstream>
int parseUsingCellDoubleValue(std::string_view csv_data)
{
std::vector<std::vector<Csv::CellDoubleValue>> cell_values;
try {
}
std::cerr << "CSV parse error: " << ex.what() << std::endl;
return EXIT_FAILURE;
}
for (std::size_t column = 0; column < cell_values.size(); ++column) {
for (std::size_t row = 0; row < cell_values[column].size(); ++row) {
const auto& cell = cell_values[column][row];
std::string formatted = std::to_string(cell.getValue());
std::cout << "(row: " << (row+1) << ", col: " << (column+1) << "): " << formatted << std::endl;
}
}
return EXIT_SUCCESS;
}
int parseUsingDouble(std::string_view csv_data)
{
std::vector<std::vector<double>> cell_values;
try {
}
std::cerr << "CSV parse error: " << ex.what() << std::endl;
return EXIT_FAILURE;
}
for (std::size_t column = 0; column < cell_values.size(); ++column) {
for (std::size_t row = 0; row < cell_values[column].size(); ++row) {
const auto& cell = cell_values[column][row];
std::string formatted = std::to_string(cell);
std::cout << "(row: " << (row+1) << ", col: " << (column+1) << "): " << formatted << std::endl;
}
}
return EXIT_SUCCESS;
}
int parseUsingVectorRowMajor(std::string_view csv_data)
{
std::vector<float> cell_values;
try {
}
std::cerr << "CSV parse error: " << ex.what() << std::endl;
return EXIT_FAILURE;
}
for (std::size_t column = 0; column < info.
getColumns(); ++column) {
for (std::size_t row = 0; row < info.
getRows(); ++row) {
auto value = cell_values.at(info.
matrixIndex(row, column));
std::string formatted = std::to_string(value);
std::cout << "(row: " << (row+1) << ", col: " << (column+1) << "): " << formatted << std::endl;
}
}
return EXIT_SUCCESS;
}
int parseUsingVectorColumnMajor(std::string_view csv_data, std::size_t num_rows)
{
std::vector<long double> cell_values;
try {
}
std::cerr << "CSV parse error: " << ex.what() << std::endl;
return EXIT_FAILURE;
}
for (std::size_t column = 0; column < info.
getColumns(); ++column) {
for (std::size_t row = 0; row < info.
getRows(); ++row) {
auto value = cell_values.at(info.
matrixIndex(row, column));
std::string formatted = std::to_string(value);
std::cout << "(row: " << (row+1) << ", col: " << (column+1) << "): " << formatted << std::endl;
}
}
return EXIT_SUCCESS;
}
int main(int argc, char** argv)
{
if (argc <= 1) {
std::cout << "Usage: " << argv[0] << " <input.csv> [<rows>]" << std::endl;
return EXIT_FAILURE;
}
std::string input_file = (argv[1] ? argv[1] : "");
int num_rows = std::stoi(argv[2] ? argv[2] : "0");
std::ifstream ifs(input_file, std::ios::binary);
if (!ifs.is_open()) {
std::cerr << "Failed to open input file " << input_file << std::endl;
return EXIT_FAILURE;
}
std::string csv_data((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
int cell_double_value_status = parseUsingCellDoubleValue(csv_data);
int double_status = parseUsingDouble(csv_data);
int matrix_row_major_status = parseUsingVectorRowMajor(csv_data);
int matrix_column_major_status = EXIT_SUCCESS;
if (num_rows > 0) {
matrix_column_major_status = parseUsingVectorColumnMajor(csv_data, num_rows);
}
return cell_double_value_status || double_status || matrix_row_major_status || matrix_column_major_status;
}
constexpr MatrixInformation parseToVectorColumnMajor(std::string_view data, Vector &values, std::size_t rows, std::optional< std::size_t > columns_hint) const
Parse CSV string data into a flat matrix in column-major format (A11, A21, A31, A12,...
Definition csv_parser.h:596
constexpr MatrixInformation parseToVectorRowMajor(std::string_view data, Vector &values) const
Parse CSV string data into a flat matrix in row-major format (A11, A12, A13, A21, ....
Definition csv_parser.h:527