读取txt文档并解析数据输出

读取如下内容:

[INFO] [2023927 13:23:04.303] [estimator.cpp:1894]: XYZI: 1.70492 -1.33857 1.99379 134
[INFO] [2023927 13:23:04.303] [estimator.cpp:1894]: XYZI: 1.70944 -1.32323 1.99325 125
[INFO] [2023927 13:23:04.303] [estimator.cpp:1892]: 1695792183.950074.pcd 
[INFO] [2023927 13:23:04.303] [estimator.cpp:1894]: XYZI: 1.69904 -1.3083 1.99324 142
[INFO] [2023927 13:23:04.303] [estimator.cpp:1894]: XYZI: 1.70866 -1.29287 1.99253 140
[INFO] [2023927 13:23:04.304] [estimator.cpp:1894]: XYZI: 1.71834 -1.2775 1.99181 138
[INFO] [2023927 13:23:04.304] [estimator.cpp:388]: Trailer angle estimator init success [INFO] [2023927 13:23:04.304] [estimator.cpp:312]: last_angle: 1695792184.150050 0.000625
[INFO] [2023927 13:23:04.353] [estimator.cpp:1941]: vehicle_pose: 1695792184.158000  -1456.254047 34.195933 93.047454
[INFO] [2023927 13:23:04.353] [estimator.cpp:1969]: trailer_pose: 1695792184.150050 34.231745
[INFO] [2023927 13:23:04.408] [estimator.cpp:475]: filter_angle: 1695792184.250059 0.000680
[INFO] [2023927 13:23:04.408] [estimator.cpp:490]: predict_angle: 1695792184.250059 0.000289
[INFO] [2023927 13:23:04.408] [estimator.cpp:352]: trailer_angle: 910 0.016561

解析出角度值 “filter_angle”, “predict_angle”,“trailer_angle”,并将结果保存成txt文档。
解析出XYZI: 1.70866 -1.29287 1.99253 140,并将结果按照解析出的“1695792183.950074.pcd ”来保存。

#include <dirent.h>
#include <fstream>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <sstream> //istringstream 必须包含这个头文件
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;struct angle_struct {double timestamp;double angle;
};struct point_struct {std::string pcd_name;double x;double y;double z;double i;
};void Stringsplit(const std::string str, const char split,std::vector<std::string> &res) {std::istringstream iss(str);std::string token;while (getline(iss, token, split)) {res.push_back(token);}
}
// 1695792261.850105.pcdvoid test(std::string &input_path) {ifstream ifs(input_path); //读取文件if (!ifs.good()) {cerr << "ifstream open file error!\n";return;}std::vector<std::vector<point_struct>> pcds;string line;// vector<string> lines;std::string get_pcd_name;point_struct point0;std::vector<point_struct> points_init;std::vector<angle_struct> trailer_angle;std::vector<angle_struct> predict_angle;std::vector<angle_struct> filter_angle;int count = 0;while (getline(ifs, line)) //获取每一行数据{//按照空格分// lines.push_back(line); //将每一行依次存入到vector中// cout << line << endl;  //顺便打印一下这一行std::vector<std::string> str_list;point_struct point;std::vector<point_struct> points;//----angle_struct angle_value;//按照空格将每一行内容划分为不同字符串,将每个字符串保存到vector里,此时每个vcetor保存这一行的内容Stringsplit(line, ' ', str_list);if (str_list.size() > 5) {string str_list_4 = str_list[4];if (str_list_4 == "XYZI:") {// std::cout << "XYZI: " << str_list[5] << " " << str_list[6] << " "//           << str_list[7] << " " << str_list[8] << std::endl;point.x = stod(str_list[5]);point.y = stod(str_list[6]);point.z = stod(str_list[7]);point.i = stod(str_list[8]);point.pcd_name = get_pcd_name;pcds.back().push_back(point);}}if (str_list.size() == 5) {get_pcd_name = str_list[4];pcds.push_back(points);count++;}if (str_list.size() == 7) {string ang_str = str_list[4];if (ang_str == "trailer_angle:") {angle_value.timestamp = stod(str_list[5]);angle_value.angle = stod(str_list[6]);trailer_angle.push_back(angle_value);}if (ang_str == "predict_angle:") {angle_value.timestamp = stod(str_list[5]);angle_value.angle = stod(str_list[6]);predict_angle.push_back(angle_value);}if (ang_str == "filter_angle:") {angle_value.timestamp = stod(str_list[5]);angle_value.angle = stod(str_list[6]);filter_angle.push_back(angle_value);}}else {continue;}}ifs.close();std::cout << "pcds: " << pcds.size() << std::endl;std::cout << "count: " << count << std::endl;for (int i = 0; i < pcds.size(); i++) {pcl::PointCloud<pcl::PointXYZINormal>::Ptr single_cloud(new pcl::PointCloud<pcl::PointXYZINormal>);std::string _name;//保存成每一帧点云single_cloud->width = 1;single_cloud->height = pcds[i].size();for (int j = 0; j < pcds[i].size(); j++) {pcl::PointXYZINormal Point;_name = pcds[i][j].pcd_name;Point.x = pcds[i][j].x;Point.y = pcds[i][j].y;Point.z = pcds[i][j].z;Point.intensity = pcds[i][j].i;single_cloud->points.push_back(Point);std::cout << "XYZI: " << pcds[i][j].pcd_name << " " << pcds[i][j].x << " "<< pcds[i][j].y << " " << pcds[i][j].z << " " << pcds[i][j].i<< std::endl;}//保存单帧pcdstd::string path_save = "../JTG/pcds/" + _name;std::cout << "path_save : " << path_save << std::endl;if (single_cloud->points.size() > 0) {pcl::io::savePCDFileBinaryCompressed(path_save,*single_cloud); //压缩保存}}ofstream ofs1("../JTG/trailer_angle.txt"); //把内容输出到a.txt文件中if (!ofs1.good()) {cerr << "ofstream open file error!\n";return;}for (auto &data : trailer_angle) {ofs1 << std::fixed << data.timestamp << " " << data.angle << '\n';}ofs1.close();//---------ofstream ofs2("../JTG/predict_angle.txt"); //把内容输出到a.txt文件中if (!ofs2.good()) {cerr << "ofstream open file error!\n";return;}for (auto &data : predict_angle) {ofs2 << std::fixed << data.timestamp << " " << data.angle << '\n';}ofs2.close();//------ofstream ofs3("../JTG/filter_angle.txt"); //把内容输出到a.txt文件中if (!ofs3.good()) {cerr << "ofstream open file error!\n";return;}for (auto &data : filter_angle) {ofs3 << std::fixed << data.timestamp << " " << data.angle << '\n';}ofs3.close();//-------
}int test2() {ofstream ofs("china_daily.txt", std::ios::app); //在文档中添加字符串if (!ofs) {cerr << "ofstream error!" << endl;return -1;}cout << ofs.tellp() << endl;    //输出整个文件的长度ofs << "this new line" << endl; //在文件末尾追加“this new line”ofs.close();return 0;
}int main(void) {std::string input_path ="../JTG/uto_trailer_pose_estimator_185511_1695792081229.txt";test(input_path);// test2();return 0;
}

Cmakelist文件如下:

cmake_minimum_required(VERSION 2.6)
project(main)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(PCL 1.8 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable(main main.cpp)target_link_libraries (main ${PCL_LIBRARIES})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【发版】java项目一键式发版,一键式发版脚本,如何实现一键式发版

0. 手动打包&#xff0c;jar包生产后 jenkins打包。 1. Dockerfile 文件&#xff1a; FROM openjdk:8MAINTAINER "维护者 <email>" RUN echo "Asia/Shanghai" > /etc/timezoneLABEL description"descr ... " ADD xxx-1.0.0-SNAPSHOT.…

BiMPM实战文本匹配【下】

引言 这是BiMPM实战文本匹配的第二篇文章。 注意力匹配 如上图所示&#xff0c;首先计算每个正向(或反向)上下文嵌入 h i p → \overset{\rightarrow}{\pmb h_i^p} hip​→​(或 h i p ← \overset{\leftarrow}{\pmb h_i^p} hip​←​)与另一句的每个正向(或反向)上下文嵌入 …

python爬虫:JavaScript 混淆、逆向技术

Python爬虫在面对JavaScript混淆和逆向技术时可能会遇到一些挑战&#xff0c;因为JavaScript混淆技术和逆向技术可以有效地阻止爬虫对网站内容的正常抓取。以下是一些应对这些挑战的方法&#xff1a; 分析网页源代码&#xff1a;首先&#xff0c;尝试分析网页的源代码&#xf…

redis实现布隆过滤器

1 概述 布隆过滤器是一种基于概率的数据结构&#xff0c;用于判断一个元素是否存在于一个集合中。相比于传统的数据结构&#xff0c;布隆过滤器具有占用空间少、查询速度快的特点&#xff0c;常被用于缓存、爬虫去重等场景。Redis 作为一款流行的 NoSQL 数据库&#xff0c;也提…

计算机图像处理-直方图均衡化

直方图均衡化 直方图均衡化是图像灰度变换中有一个非常有用的方法。图像的直方图是对图像对比度效果上的一种处理&#xff0c;旨在使得图像整体效果均匀&#xff0c;黑与白之间的各个像素级之间的点分布更均匀一点。通过这种方法&#xff0c;亮度可以更好地在直方图上分布。 …

2009-2018年31省份旅游收入(入境、国内、总收入;第三产值;GDP)

2009&#xff0d;2018年31省份旅游收入&#xff08;入境、国内、总收入&#xff1b;第三产值&#xff1b;GDP&#xff09; 1、时间&#xff1a;2009-2018年 2、指标&#xff1a; 汇率、入境旅游收入&#xff08;万美元&#xff09;、国内旅游收入&#xff08;亿元&#xff0…

IM同步服务

设计概述 后台同步方案的设计就是数据存储结构的设计&#xff0c;如何快速体现“信息变化”&#xff0c;如何快速计算出“变化信息”。后台数据存储结构是由同步协议中同步契约决定的。 设计方案 该方案的同步是按照业务粒度来划分&#xff0c;只需要同步sdk要求同步的数据。…

MATLAB算法实战应用案例精讲-【优化算法】季节优化算法(SOA)(附MATLAB代码实现)

前言 世界上许多地方一年有四个季节:春、夏、秋、冬。每个季节的天气都不一样。随着天气的变化,生物,尤其是树木会改变它们的行为来适应天气。森林中的每一个个体都被称为一棵树。在满足终止条件之前,森林中的树木通过类似于自然界树木生命周期的四种操作:更新、竞争、播种…

中秋节快乐

中秋节快乐&#xff0c;国庆节快乐

架构案例2022(四十二)

促销管理系统 某电子商务公司拟升级其会员与促销管理系统&#xff0c;向用户提供个性化服务&#xff0c;提高用户的粘性。在项目立项之初&#xff0c;公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性&#xff0c;由于当前用户规模不大&#xff0c;业务也相对…

第40节——路由初识,定义路由组件

文档地址 http://www.reactrouter.cn/docs/getting-started/tutorial version V6.x 一、什么是路由 前端路由指的是一种将浏览器URL与特定页面或视图关联起来的技术。在传统的Web开发中&#xff0c;当用户点击链接或者输入URL时&#xff0c;服务器会接收到请求并返回相应的…

专栏更新情况:华为流程、产品经理、战略管理、IPD

目录 前言 01 华为流程体系入门课 CSDN学院 02 产品经理进阶课 CSDN学院 03 BLM 战略方法论进阶课 04 IPD 进阶 100 例专栏 作者简介 前言 已上线四大课程专栏更新情况&#xff1a; 01 华为流程体系入门课&#xff08;视频图文&#xff09;&#xff1b; 02 硬件产品经…

安防监控产品经营商城小程序的作用是什么

安防监控产品覆盖面较大&#xff0c;监控器、门禁、对讲机、烟感等都有很高用途&#xff0c;家庭、办公单位各场景往往用量不少&#xff0c;对商家来说&#xff0c;市场高需求背景下也带来了众多生意&#xff0c;但线下门店的局限性&#xff0c;导致商家想要进一步增长不容易。…

C++之容器类有趣的实验(二百四十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

无线WIFI工业路由器可用于楼宇自动化

钡铼4G工业路由器支持BACnet MS/TP协议。BACnet MS/TP协议是一种用于工业自动化的开放式通信协议&#xff0c;被广泛应用于楼宇自动化、照明控制、能源管理等领域。通过钡铼4G工业路由器的支持&#xff0c;可以使设备间实现高速、可靠的数据传输&#xff0c;提高自动化水平。 钡…

Kubernetes(k8s)上搭建一主两从的mysql8集群

Kubernetes上搭建一主两从的mysql8集群 环境准备搭建nfs服务器安装NFS暴露nfs目录开启nfs服务器 安装MySQL集群创建命名空间创建MySQL密码的Secret安装MySQL主节点创建pv和pvc主节点的配置文件部署mysql主节点 安装第一个MySQL Slave节点创建pv和pvc第一个从节点配置文件部署my…

centos给用户分配docker权限

原理 docker守护进程启动的时候&#xff0c;会默认赋予名为docker的用户组读写Unix socket的权限&#xff0c;因此只要创建docker用户组&#xff0c;并将当前用户加入到docker用户组中&#xff0c;那么当前用户就有权限访问Unix socket了&#xff0c;进而也就可以执行docker相…

在 EMR Serverless 上使用 Delta Lake

本文是一份开箱即用的全自动测试脚本&#xff0c;用于在 EMR Serverless 上提交一个 Delta Lake 作业。本文完全遵循《最佳实践&#xff1a;如何优雅地提交一个 Amazon EMR Serverless 作业&#xff1f;》 一文给出的标准和规范&#xff01; 1. 导出环境相关变量 注意&#x…

聚观早报 | 飞书签约韵达速递;蔚来首颗自研芯片“杨戬”量产

【聚观365】9月22日消息 飞书签约韵达速递 蔚来首颗自研芯片“杨戬”10月量产 靳玉志接任华为车 BU CEO 亚马逊发布全新Alexa语音助手 OpenAI推出图像生成器DALL-E 3 飞书签约韵达速递 近日&#xff0c;国内物流服务公司韵达快递宣布全员上飞书。飞书解决方案副总裁何斌表…

Redis学习第九天

今天是Jedis&#xff01;作者的Redis在游戏本上&#xff0c;但是Java的IDEA总是下载不了&#xff0c;所以只能作为概念听一听了&#xff0c;目前无法做到实操。 Jedis概念 Jedis实操 首先要保证redis的服务器开启&#xff0c;然后引入jedis依赖&#xff0c;最后通过服务器的I…