C语言eigen存为txt文件,C++读入"N,X,Y,Z"格式文本文件到Eigen3 Matrix

C++读入"N,X,Y,Z"格式文本文件到Eigen3 Matrix,以及相同格式输出方法

很多数据资料的格式类似这样:

1,-2085738.7757,5503702.8697,2892977.6829

2,-2071267.5135,5520926.7235,2883341.8135

3,-2079412.5535,5512450.8800,2879771.2119

4,-2093693.1744,5511218.2651,2869861.8947

5,-2113681.5062,5491864.0382,2896934.4852

6,-2100573.2849,5496675.0138,2894377.6030

其中数据按照N(点号),X,Y,Z(三维坐标)排序。

这里提供一种C++读入"N,X,Y,Z"格式文本文件到Eigen3 Matrix的方法,以及对应的同格式输出方法

#pragma once

#include

#include

#include

#include

#include

#include

#include

using namespace std;

using namespace Eigen;

// 字符串分割

void SplitString(const std::string& s, std::vector<:string>& v, const std::string& c)

{

std::string::size_type pos1, pos2;

pos2 = s.find(c);

pos1 = 0;

while (std::string::npos != pos2)

{

v.push_back(s.substr(pos1, pos2 - pos1));

pos1 = pos2 + c.size();

pos2 = s.find(c, pos1);

}

if (pos1 != s.length())

v.push_back(s.substr(pos1));

}

// 读入相应格式的xyz文件

void ReadXYZFile(string filepath, MatrixXd& origin_data)

{

ifstream infile;

infile.open(filepath);

cout << "Reading XYZ File: " << filepath << endl;

if (!infile.is_open())

{

cout << "File Cannot Open" << endl;

exit(1);

}

int r = 0; // 逐行加载数据

char buffer[100];

while (!infile.eof())

{

// getline只能读成char*,

// 而SplitString只能切割string,

// 而atof又只能转化char*到double

infile.getline(buffer, 100);

// cout << buffer << endl;

string line = buffer;

if (line == "")

{

continue;

}

vector vector_data;

SplitString(line, vector_data, ",");

for (int c = 0; c < origin_data.cols(); c++)

{

origin_data(r, c) = atof(vector_data[c].c_str());

}

r++;

}

return;

}

// 将矩阵按读入的相同格式保存至相应路径

void WriteXYZFile(string filepath, MatrixXd& trans_data)

{

ofstream outfile;

outfile.open(filepath, ios::out | ios::trunc);

for (int r = 0; r < trans_data.rows(); r++)

{

for (int c = 0; c < trans_data.cols(); c++)

{

if (c < trans_data.cols() - 1)

{

outfile << trans_data(r, c) << ',';

}

if (c == trans_data.cols() - 1)

{

outfile << trans_data(r, c);

}

}

outfile << endl;

}

cout << "Write XYZ File: " << filepath << endl;

outfile.close();

return;

}

总结

到此这篇关于C++读入"N,X,Y,Z"格式文本文件到Eigen3 Matrix的文章就介绍到这了,更多相关c++ 读入文本文件Eigen3 Matrix内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值