初学C++,尝试实现惯性导航+零速修正+卡尔曼滤波

第一步,读取csv中的传感器数据

此处用到C++文件的输入输出控制知识

首先定义声明一个ifstream对象,与文件名关联。ps:关联后相当于找到了文件的地址,可以通过此对象对文件操作

需要包含头文件#include <fstream>

ifstream _csvInput("csvdata/xxxx.csv")

或者

ifstream _csvInput;
_csvInput.open(csvdata/xxxx.csv)

然后就可以像cin一样操作_csvInput。例如

char ch;
_csvInput >> ch;
char buf[80];
_csvInput >> buf;
_csvInput.getline(buf, 80);
string line;
getline(_csvInput, line);

这里,我读的是传感器数据,csv文件每行,首个为number,其次是三个acc数据,三个gyro数据,三个mag数据

因此使用getline先读到一行数据

定义一行数据为字符串

string _Oneline;

读该文件一行数据

getline(_csvInput, _Oneline);

此时读到的数据存在_Oneline中,此行数据包括了上述四类数据(number,acc[3],gyro[3],mag[3])

此时再声明一个输入的串流对象,和刚刚的ifstream类似,由此可以对_Oneline进行操作

istringstream _Readstr(_Oneline);    

再定义一行中,各个数据由_partOfstr表示

string _partOfstr;

读取由  ','  隔开的各个数据 ,再转化为float型(一行有10个','分开的数据)

for(int i = 0; i < 10; i++)
{   getline(_Readstr, _partOfstr, ',');data[i] = atof(_partOfstr.c_str());   }

得到的data[]即是最后的结果。

最后程序

main.cpp

#include "global.h"
#include "ReadData.h"
#include "imu.h"using namespace std;int main()
{IMUdata imudata;//指定文件路径const char* path = "csvdata/straightLine_CalInertialAndMag.csv";//初始化CSVreader类对象CSVreader reader(path);//读数据,第一行为列名,不做处理reader.readline();while(!reader.readline()){//得到原始数据imudata = setIMU(reader.data);cout << imudata.acc[0] << endl;break;}//暂停等待用户信号,不然控制台程序会一闪而过system("pause");
}

ReadData.cpp

#include "ReadData.h"//构造函数,初始化文件路径
CSVreader::CSVreader(const char *path)
{_csvInput.open(path);
}
//读取csv文件数据
int  CSVreader::readline()
{//定义一行数据为字符串string _Oneline;//读取一行数据getline(_csvInput, _Oneline);//cout << "原始字符串:" << _Oneline << endl;//如果读取到首行数据,返回失败if (_Oneline[0] == 'P')return EXIT_FAILURE;//定义字符串流对象istringstream _Readstr(_Oneline);   //定义一行数据中的各个字串string _partOfstr;//将一行数据按','分割for(int i = 0; i < 10; i++){    getline(_Readstr, _partOfstr, ',');data[i] = atof(_partOfstr.c_str());   }//判断是否读完数据if ((data[0]||data[1]||data[3]) == 0)return EXIT_FAILURE;return EXIT_SUCCESS;
}

ReadData.h

#pragma once
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>#include "global.h"using namespace std;
//定义CSV读类
class CSVreader
{
public:CSVreader(const char *);int readline();float data[10];
private:ifstream _csvInput;
};

imu.cpp

#include "imu.h"
//将文件读到的数据传到IMUdata结构体
IMUdata setIMU(float data[])
{IMUdata imudata;for (int i = 0; i < 3; i++){imudata.acc[i] = data[i + 1];imudata.gyro[i] = data[i + 4];imudata.mag[i] = data[i + 7];}return imudata;
}

imu.h

#pragma oncestruct Time {int hour;int minute;int sec;int ms;
};struct IMUdata {float acc[3];float gyro[3];float mag[3];int number;
};IMUdata setIMU( float data[]);

C++读取csv文件相关推荐

  1. 【OpenCV】读取csv文件

    csv简介 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个 ...

  2. 读取CSV文件内容,将其转换成JSON字符串输出

    CsvToJsonUtil 工具类作用:读取CSV文件内容,将其转换成JSON字符串输出 转换工具类代码如下: package com.test.util;import java.io.*; impo ...

  3. 技术图文:C# VS. Python 读取CSV文件指南

    背景 CSV 是一种以逗号进行特征分隔的文本文件类型,在数据库或电子表格中是一种非常常见的导入导出格式.本篇图文就以泰坦尼克号船员获救预测( Kaggle)中使用的数据集为例来说明 C#.Python ...

  4. python将二维列表内容写入和读取.csv文件

    python将列表按行写入至.csv文件 # coding:utf-8 import csv list=[[1,2,3,4],[5,6,7,8],[89,55,66666,5],['张三','李四', ...

  5. R语言读取CSV文件

    #读取CSV文件 data <- read.csv("drugbank.csv", header = FALSE)

  6. pandas读取csv文件的前几行数据(nrows参数)、pandas读取csv文件的中间几行数据(skiprows=range(a,b))

    pandas读取csv文件的前几行数据(nrows参数).pandas读取csv文件的中间几行数据(skiprows=range(a,b)) 目录 pandas读取csv文件的前几行数据.pandas ...

  7. pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件

    pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件 目录

  8. python读取csv文件并修改指定内容-pandas读取CSV文件时查看修改各列的数据类型格式...

    下面给大家介绍下pandas读取CSV文件时查看修改各列的数据类型格式,具体内容如下所述: 我们在调bug的时候会经常查看.修改pandas列数据的数据类型,今天就总结一下: 1.查看: Numpy和 ...

  9. python读取csv文件的方法-CSV文件在Python中的几种处理方式

    Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...

  10. python批量读取csv文件-Python读取/批量读取文件

    相信很多人的日常工作中,数据源除了来自数据库以外,其次就是外部文件,因此掌握读取文件的技能是相当必要的.在这里特此整理读取外部文件的方法,希望能有助你们快速解决问题.当然本文对读者的假设是有一定的py ...

最新文章

  1. KVM调整cpu和内存
  2. USB基础---设备、配置、接口、端点和字符串描述符
  3. 九江学院计算机主任黄冬久,陈春生副校长到实验中间调研引导工作
  4. 十个免费的WEB压力测试工具
  5. MTK 8127平台使用busybox
  6. 【Spark】Spark基本概念
  7. 两个前置摄像头_W21 5G性能篇 | 五摄像头组合,洞悉画面之美
  8. 第一节:Scrapy开源框架初探
  9. ifcfg-eth0配置详解
  10. 电阻电容串联、并联起来用在电路中,起什么作用?
  11. oracle数据文件recover,又遇BUG-ORA-01148:数据文件忽然变为recover状态
  12. linux ssh keygen r,SSH的ssh-keygen命令基本用法详解
  13. 如何编程阶梯形c语言,阶梯式C语言程序设计实验指导书.doc
  14. java怎么删除一行表格_Java 创建、删除Word表格
  15. 什么是嵌入式软件开发?
  16. iOS开发入门——基础篇一
  17. VuePress + GitHub Pages 生成静态网站
  18. 3GPP TS 23501-g51 中英文对照 | 5.2.3 Identification and authentication
  19. 人工神经网络的训练步骤,人工神经网络建模步骤
  20. python中plguba_Python量化交易进阶讲堂-爬虫抓取东方财富网股吧帖子

热门文章

  1. 无法解析服务器的dns地址
  2. QT编译出错解决 libQtCore.so: undefined reference to `QInotifyFileSystemWatcherEngine::create()'
  3. MCD12Q1数据处理教程——基于HEG、ArcGIS和ENVI
  4. 朱松纯团队新作:让AI「读懂」人类价值观!登上Science Robotics
  5. 浅谈:APP开发市场的发展轨迹与未来趋势
  6. 汉诺塔 问题 VIII
  7. 无人机飞控 ardupilot Copter-4.0.7 库示例
  8. 微信红包 php算法,基于PHP微信红包的算法探讨
  9. 解决QQ登录SDK不能网页授权登录的问题
  10. 计算机网络术语sonet,SONET