【C++】读取 .csv / .xlsx 文件中的指定数据(非常实用)

        说明:如果您的文件是 .xlsx ,需要您先打开 .xlsx 文件,然后另存为 .csv 文件,最后使用下述代码进行读取!!!

        注意:直接修改文件后缀不行哦!!!

        在做数据处理或者图像处理时,偶尔需要从文件中读取数据,本文主要是从 .csv 中读取数据,读取的数据可以是某一行、某一列或具体某一个数值/坐标; 

1、数据介绍

        本文所使用的数据如下表所示,列从零开始计数,第 0、4、5 列为具体数值,第 1、2、3 列为坐标数据;本文的目标是把表格中的数据逐个读取出来,以备项目可视化使用;

2、代码实现

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

using namespace std;


int main()
{
	//读取文件中的数据
	ifstream ifs;							//创建流对象

	ifs.open("./myPosition.csv", ios::in);	//打开文件

	if (!ifs.is_open())						//判断文件是否打开
	{
		cout << "打开文件失败!!!";
		return 0;
	}

	vector<string> item;		//用于存放文件中的一行数据

	string temp;				//临时存储文件中的一行数据

	while (getline(ifs, temp))  //利用 getline()读取文件中的每一行,并放入到 item 中
	{
		item.push_back(temp);
	}
    
    //遍历文件中的每一行数据
	for (auto it = item.begin(); it != item.end(); it++)
	{
		string str;

		//其作用是把字符串分解为单词(在此处就是把一行数据分为单个数据)
		istringstream istr(*it);                 

		//将字符串流 istr 中的字符读入到 str 字符串中,读取方式是以逗号为分隔符 
		getline(istr, str, ',');                 
		cout << str << "\t";            // str 对应第一列数据
        //atoi(str.c_str())该函数将字符转化为 int 数据            

		getline(istr, str, ',');                    
		cout << str << "\t";            // str 对应第二列数据 

		getline(istr, str, ',');                
		cout << str << "\t";            // str 对应第三列数据   

		getline(istr, str, ',');                
		cout << str << "\t";            // str 对应第四列数据 

		getline(istr, str, ',');                  
		cout << str << "\t";            // str 对应第五列数据 

		getline(istr, str, ',');                 
		cout << str << endl;            // str 对应第六列数据    
	}    

	system("pause");
	return 0;
}

3、实验结果 

        下图是我对读取的数据进行了输出,读者可以根据需要自行保存自己需要的数据即可,不需要的数据可以不做处理;此外,读者还可以使用 atoi(str.c_str()) 函数把想要的数据由字符型转化为 int ; 

 4、代码说明

        我主要是把 .csv 中的数据读出来,然后使用 Qt 界面进行可视化,如下图所示;所以无需把字符串数据转化为整型或浮点型;如果读者有需要可以使用 atoi(str.c_str())、atof(str.c_str())函数自行转换;

        具体代码说明,见上文注释,非常详细,谢谢!!!

        读取 .txt 文件中的一列或多列数据见:

        https://blog.csdn.net/weixin_47156401/article/details/121798931

  • 24
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据库内核

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值