在C+;中输入.csv数据(浮点和字符串)矩阵+; 我写了以下C++输入函数。它接受一个.CVS文件并返回一个矩阵(键入vector文件名; 字符串数据(“./path/”+文件名+“.csv”); ifstream文件(数据); if(file.is_open()){ while(getline(文件,行)){ 向量行; istringstream iss(线); 字符串值; while(getline(iss,value,,')){ /*这里我将.CSV矩阵的值作为C字符串 并将它们转换为浮点数*/ ROW.push_back(atof(value.c_str()); } M.向后推(世界其他地区); } file.close(); }否则{ cout

在C+;中输入.csv数据(浮点和字符串)矩阵+; 我写了以下C++输入函数。它接受一个.CVS文件并返回一个矩阵(键入vector文件名; 字符串数据(“./path/”+文件名+“.csv”); ifstream文件(数据); if(file.is_open()){ while(getline(文件,行)){ 向量行; istringstream iss(线); 字符串值; while(getline(iss,value,,')){ /*这里我将.CSV矩阵的值作为C字符串 并将它们转换为浮点数*/ ROW.push_back(atof(value.c_str()); } M.向后推(世界其他地区); } file.close(); }否则{ cout,c++,csv,input,C++,Csv,Input,我想更改并改进此函数,使其不仅可以输入数字数据,而且可以输入数字和字符串,无论哪一列或哪一行包含哪种数据 你知道怎么做吗?提前谢谢 #include <iostream> #include <vector> #include <fstream> #include <sstream> using namespace std; typedef vector<double> Vector; typedef vector<Vector&

我想更改并改进此函数,使其不仅可以输入数字数据,而且可以输入数字和字符串,无论哪一列或哪一行包含哪种数据

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

#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
typedef向量;
向量矩阵;
矩阵输入(字符串和文件名){
弦线;
矩阵M;
做{
cout>文件名;
字符串数据(“./path/”+文件名+“.csv”);
ifstream文件(数据);
if(file.is_open()){
while(getline(文件,行)){
向量行;
istringstream iss(线);
字符串值;
while(getline(iss,value,,')){
/*这里我将.CSV矩阵的值作为C字符串
并将它们转换为浮点数*/
ROW.push_back(atof(value.c_str());
}
M.向后推(世界其他地区);
}
file.close();
}否则{

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

typedef struct {
  double fValue;
  std::string sValue;
  enum value_tag {type_string, type_float};
  value_tag type;
} CvsValue;

std::vector<std::vector<CvsValue> > Matrix;
typedef结构{
双重价值;
std::字符串值;
枚举值_标记{type_string,type_float};
值\标签类型;
}CVS值;
向量矩阵;

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

使用stringstream转换类型,并将类型作为函数的模板参数。您使用什么格式的CSV?更具体地说,分隔符是什么?空格、逗号、半列、制表符?separator是同一行中的值之间的逗号,以及行之间的换行符(enter)。输入文件中没有空格或制表符,只有数字和逗号。我将尝试使用stringstream,但到目前为止,我仍然对此非常困惑。