我目前有一个C ++程序来读取值矩阵(类型为double)并打印出转置,如何更改我的代码以便它可以读取csv文件而不是间隔矩阵文本?
我还需要在计算后将转置矩阵写出到另一个文件中,这样做最简单的方法是什么?
int readMatrix(const string & s, vector<double> & v);
void import_csv_matrix(const char* filename_matrix, vector <double> & v, int& rows, int& columns);
int main() {
vector<double> v;
int rows = 0;
int columns = 0;
import_csv_matrix("filename.csv", v, rows, columns);
return 0;
}
int readMatrix (const string & s, vector<double> & v) {
istringstream is(s);
double n;
while (is >> n) {
v.push_back(n);
}
return v.size();
}
void import_csv_matrix(const char* filename_matrix, vector<double>& v, int& rows, int& columns) {
ifstream data_File;
string line;
data_File.open(filename_matrix);
if (data_File.is_open()) {
int i = 0;
getline(data_File, line);
columns = readMatrix(line, v);
for (i = 1; i < 100000; i++) {
if ( !getline(data_File, line) > 0) break;
readMatrix(line, v);
}
rows = i;
data_File.close();
}
cout << "Transpose:" << endl;
for (int i = 0; i < columns; i++) {
for (int j = 0; j < rows; j++) {
cout << v[i + j*columns] << "\t";
}
cout << endl;
}
}
答案 0 :(得分:0)
我假设您的意思是行仍然是行分隔的,但行内的元素是逗号分隔的。然后,您需要做的就是修改readMatrix函数来处理这些逗号。以下代码应该可以使用。
int readMatrix(const string& s, vector<double>& v) {
char comma = ',';
istringstream is{s};
for (double temp = 0.0; is >> temp; v.push_back(temp)) {
is >> comma;
if (comma != ',') break; \\ a formatting error has occurred
}
return v.size();
}