C++从csv文件中读取数据

C++从csv文件中读取数据,第1张

读取csv文件中的数据,并保存为二维数组。

vector<vector<double>> read_gt_file(string filename){
    ifstream inFile(filename, ios::in);
    string lineStr;
    char delim=',';
    vector<vector<double>> matrix;
    if(inFile.fail()){
        cout <<"Read files fail....."<<endl;
        return matrix;
    }
    
    while (getline(inFile, lineStr)) {
        stringstream ss(lineStr);
        string str;
        vector<double> lineArray;

        // cut apart by flag
        while (getline(ss, str, delim))
            lineArray.push_back(std::stod(str));
        matrix.push_back(lineArray);
    }
    return matrix;
}

如果有做slam的需要,当位姿数据的存储格式为TUM格式(具体形式为:)

timestamp x y z q_x q_y q_z q_w

这时读取位姿数据可以使用如下版本:

#include "Eigen/Core"
#include "Eigen/Geometry"

vector<Eigen::Matrix4d> read_gt_file(string filename){
    ifstream inFile(filename, ios::in);
    string lineStr;
    char delim=' ';
    if(inFile.fail()){
        cout <<"Read files fail....."<<endl;
        Eigen::Matrix4d::Identity();
    }
    vector<Eigen::Matrix4d> gt_poses;
    while (getline(inFile, lineStr)) {
        Eigen::Matrix4d gt_pose = Eigen::Matrix4d::Identity();
        stringstream ss(lineStr);
        string str;
        vector<double> lineArray;

        // cut apart by flag
        while (getline(ss, str, delim))
            lineArray.push_back(std::stod(str));

        Eigen::Quaterniond q(lineArray[7], lineArray[4], lineArray[5], lineArray[6]);
        gt_pose.block<3,3>(0, 0) = q.toRotationMatrix();
        gt_pose.block<3,1>(0, 3) = Eigen::Vector3d(lineArray[1], lineArray[2], lineArray[3]);
        gt_poses.push_back(gt_pose);
    }
    return gt_poses;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1325248.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存