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

时间:2015-12-01 20:45:05

标签: c++ csv matrix transpose

我目前有一个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;
    }
}

1 个答案:

答案 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();
}