首页 > 编程语言 >c++ 从txt读取数据 按照特殊字符拆分 gnss

c++ 从txt读取数据 按照特殊字符拆分 gnss

时间:2024-07-31 22:50:56浏览次数:12  
标签:std const 读取数据 double c++ gnss data row

 

 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(ReadTextFile)

# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加可执行文件,并链接主程序文件和自定义类的头文件
add_executable(main main.cpp )

  

main.cpp

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>

#include<iomanip>

using namespace std;


class gnss_data
{

public:
   // 原始数据
   double time;
   double lat;
   double lon;
   double high;
    
   // ENU坐标GNSS的原点
   double lat0;
   double lon0;
   double high0;

   // 在ENU坐标下
   double x;
   double y;
   double z;

public:
   // 初始化 赋予原始数据
   gnss_data(double time_,double lat_,double lon_,double high_){
        time=time_;
        lat=lat_;
        lon=lon_;
        high=high_;
   };

   bool Set_orinGnss(double lat0_,double lon0_,double high0_){
     lat0=lat0_;
     lon0=lon0_;
     high0=high0_;
   }

   bool Set_ENU(double x_,double y_,double z_){
     x=x_;
     y=y_;
     z=z_;
   }

};


class GNSS_TextFileReader {
public:
    std::string filename;
    char delimiter;
    std::vector<std::vector<std::string>> data; // 二维向量,存储每一行拆分后的数据
    std::vector<gnss_data> gnss_List;


 
public:
    GNSS_TextFileReader(const std::string &filename, char delimiter) 
        : filename(filename), delimiter(delimiter) {}

    bool readFile() {
        std::ifstream file(filename);
        if (!file.is_open()) {
            std::cerr << "Error opening file " << filename << std::endl;
            return false;
        }

        std::string line;
        while (std::getline(file, line)) {
            std::stringstream ss(line);
            std::string token;
            std::vector<std::string> row;

            while (std::getline(ss, token, delimiter)) { // delimiter 分割
                row.push_back(token);
            }
            data.push_back(row);//  保存string数据double

            gnss_data gnss_data_i( stod(row[0]),stod(row[1]),stod(row[2]),stod(row[3])); //保存double数据
            gnss_List.push_back(gnss_data_i);
        }

        file.close();



        return true;
    }

    void printData() {
        // for (const auto &row : data) {
        //     for (const auto &col : row) {
        //         std::cout << col << " ";
        //     }
        //     std::cout << std::endl;
        // }

       //for (const auto &gnss_List_i : gnss_List) {  
       for(int i=0;i<gnss_List.size();i++){
        gnss_data gnss_List_i=gnss_List[i];
        cout<< "编号 " << i << " 时间戳 "<< gnss_List_i.time<< " 纬度 " << gnss_List_i.lat <<  "  经度 " << gnss_List_i.lon<< "  高度 "<<  gnss_List_i.high << fixed << setprecision(10)<< endl;
       }

    }

    const std::vector<std::vector<std::string>>& getData() const {
        return data;
    }

    const std::vector<gnss_data>& get_gnss_List() const {
        return gnss_List;
    }
};

int main() {

    string path_="/home/dongdong/2project/0data/NWPU/";
    path_=path_+"FHY_config/FHY_gps.txt";

    GNSS_TextFileReader reader(path_, ' '); // 读取路径 分隔符号 
    
    if (reader.readFile()) {
        //reader.printData();
        std::vector<gnss_data> gnss_Lists =  reader.get_gnss_List();
        for(int i=0;i<gnss_Lists.size();i++){
            gnss_data gnss_List_i=gnss_Lists[i];
            cout<< "编号 " << i << " 时间戳 "<< gnss_List_i.time<< " 纬度 " << gnss_List_i.lat <<  "  经度 " << gnss_List_i.lon<< "  高度 "<<  gnss_List_i.high << fixed << setprecision(10)<< endl;
        }
    }





    return 0;
}

  

标签:std,const,读取数据,double,c++,gnss,data,row
From: https://www.cnblogs.com/gooutlook/p/18335662

相关文章

  • 从C++看C#托管内存与非托管内存
    进程的内存一个exe文件,在没有运行时,其磁盘存储空间格式为函数代码段+全局变量段。加载为内存后,其进程内存模式增加为函数代码段+全局变量段+函数调用栈+堆区。我们重点讨论堆区。进程内存函数代码段全局变量段函数调用栈堆区托管堆与非托管堆C#inta=1......
  • 高精度加法、减法、乘法、除法(C++)
    1、引入在进行大整数运算中,因为在C++/C中整数,最大也就是unsignedlonglong也就才(1e19+8e18)位,如果要几百位的相加减就不行了,所以就要用高精度了,这里只在C++/C上使用有价值,在例如python、Java语言上无需写此算法,python可以无限大,Java里有相关库可以引入。2、入门的思路即为......
  • 基于VScode和C++ 实现Protobuf数据格式的通信
    目录1.Protobuf概述1.1定义1.2Protobuf的优势2.Protobuf语法3、序列号和反序列化3.1.pb.h头文件3.2序列化3.3反序列化4、测试用例Protobuf详细讲解链接1.Protobuf概述1.1定义protobuf也叫protocolbuffer是google的一种数据交换的格式,它独立于语......
  • UE4 C++ 多人游戏中的简单聊天窗口
    本质不管是客户端还是服务器在输入文字后,按下回车发送,将触发RPC调用。然后通过RPC将发送者,输入文本等信息,传入到服务器,然后通过多播RPC传播到所有客户端的聊天框。UIUI利用三个组件ScrollBox用于在服务器以及每个客户端上显示消息的载体TextBlock本地将信息通过一个一个的T......
  • Linux下C++动态链接库的生成以及使用
    目录一.前言二.生成动态链接库三.使用动态链接库一.前言这篇文章简单讨论一下Linux下如何使用gcc/g++生成和使用C++动态链接库(.so文件)。二.生成动态链接库先看下目录结构然后看下代码//demo.h#ifndefDEMO_H#defineDEMO_H#include<string>classDemo{......
  • 【C++BFS算法 二分查找】2812. 找出最安全路径
    本文涉及知识点C++BFS算法C++二分查找LeetCode2812.找出最安全路径给你一个下标从0开始、大小为nxn的二维矩阵grid,其中(r,c)表示:如果grid[r][c]=1,则表示一个存在小偷的单元格如果grid[r][c]=0,则表示一个空单元格你最开始位于单元格(0,0)。在......
  • 【C++】构造函数的深入学习
    一、初始化列表C++提供初始化列表语法用来初始化属性语法:构造函数():属性1(值1),属性2(值2)...{}classPeople{public://传统初始化操作Person(inta,intb,intc){A=a;B=b;C=c;}//初始化列表初始化属性Pers......
  • 【C++】对象模型和this指针
    一、成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上①C++编译器会给每一个空对象分配一个字节的空间,为了区分空对象占内存的位置classPerson{}voidtest(){PersonP;//空类(类中什么也没有)中的空对象所占内存空间为1cout<<sizeof(P......
  • C++面向对象编程解析
    文章目录1.概述2.作用解析3.概念解析1.类和对象2.封装(Encapsulation)3.继承(Inheritance)4.多态(Polymorphism)1.概述C++是在C语言的基础上增加了面向对象编程(OOP)特性的编程语言。面向对象编程是一种编程范式,通过将程序组织成对象的集合,这些对象包含数据和行......
  • 关于使用C#注入C++的封装DLL后打印内容乱码
    最近因需要,用C++写了个钩子的DLL,一切工作测试通过后,放到C#里使用P/Invoke调用,发现部分乱码,最后反复测试,才发现一个问题,原来SetWindowsHookEx这个函数,也是分A版和W版,最后换了就正常了,附上对比。。乱码[DllImport("user32.dll",SetLastError=true]publicstaticex......