在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,但到目前为止,我仍然对此非常困惑。