首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中输入.csv数据(浮点数和字符串)矩阵

在C++中输入.csv数据(浮点数和字符串)矩阵
EN

Stack Overflow用户
提问于 2014-10-01 20:02:47
回答 1查看 854关注 0票数 0

我已经写了下面的C++输入函数。它接受一个.CVS文件并返回一个矩阵(类型为vector < vector< double>>)。它只适用于.CSV文件中的数值,因为它将值作为c字符串,并且atof()函数将它们转换为浮点型。

我想改变这个函数并改进它,这样它不仅可以输入数字数据,而且可以输入数字和字符串,无论哪一列或哪一行包含什么类型的数据。

你知道怎么做吗?提前谢谢你!

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;

typedef vector<double> Vector;
typedef vector<Vector> Matrix;

Matrix input(string& file_name) {
    string line;
    Matrix M;

    do {
        cout << "Enter the name of a .csv file: ";
        cin >> file_name;
        string data("./path/" + file_name + ".csv");
        ifstream file(data);

        if (file.is_open()) {
            while (getline(file, line)) {
                Vector ROW;
                istringstream iss(line);
                string value;
                while (getline(iss, value, ',')) {
                    /* HERE I TAKE THE VALUES OF THE .CSV MATRIX AS C-STRINGS
                       AND CONVERT THEM AS FLOATS                          */
                    ROW.push_back(atof(value.c_str()));
                }
                M.push_back(ROW);
            }
            file.close();
        } else {
            cout << endl << "Error: Incorrect name or unable to open the file."
                 << endl;
        }
    } while (M.empty());

    return M;
}

int main() {
    string name = "test";
    Matrix data;
    data = input(name);

    /* Print the matrix*/
    for (size_t i(0); i < data.size(); ++i) {
        for (size_t j(0); j < data[i].size(); ++j) {
            cout << data[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-01 21:22:43

您的第一个问题是定义可以存储任一类型的值的容器:

代码语言:javascript
复制
typedef struct {
  double fValue;
  std::string sValue;
  enum value_tag {type_string, type_float};
  value_tag type;
} CvsValue;

std::vector<std::vector<CvsValue> > Matrix;

然后,您可以解析CSV值并以适当的格式进行存储。我建议将逻辑封装在CvsValue构造函数中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26140928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档