说明:如果您的文件是 .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