读取 csv 矩阵并打印转置的 C++ 程序

C++ program to read a csv matrix and print the transpose

我目前有一个 C++ 程序可以读取值矩阵(双精度类型)并打印出转置,我如何更改我的代码以便它可以读取 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;
    }
}

我假设你的意思是行仍然是行分隔的,但行中的元素是逗号分隔的。然后您需要做的就是修改 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();
}