在做数据处理时,我们往往只需要文件中的某一行或某一列数据,获取文件中的某一行数据比较简单,本文中只是对获取某一列或多列数据进行了实现!
1、具体实现如下,实现的具体过程在代码中已经详细注释;
#include <iostream>
#include <vector>
#include <iomanip>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
ifstream ifs; //创建流对象
ifs.open("./position.txt", ios::in); //打开文件
if (!ifs.is_open()) //判断文件是否打开
{
cout << "打开文件失败!!!";
return 0;
}
//读取正确匹配特征点
vector<int> target_1, target_2; //用于存放目标数据
vector<string> item; //用于存放文件中的一行数据
string temp; //把文件中的一行数据作为字符串放入容器中
while (getline(ifs, temp)) //利用getline()读取每一行,并放入到 item 中
{
item.push_back(temp);
}
for (auto it = item.begin(); it != item.end(); it++)
{
//cout << *it << endl;
istringstream istr(*it); //其作用是把字符串分解为单词(在此处就是把一行数据分为单个数据)
string str;
int count = 0; //统计一行数据中单个数据个数
//获取文件中的第 1、2 列数据
while (istr >> str) //以空格为界,把istringstream中数据取出放入到依次s中
{
//获取第1列数据
if (count == 1)
{
int r = atoi(str.c_str()); //数据类型转换,将string类型转换成float,如果字符串不是有数字组成,则字符被转化为 0
target_1.push_back(r);
}
//获取第2列数据
else if (count == 2)
{
int r = atoi(str.c_str()); //数据类型转换,将string类型转换成float
target_2.push_back(r);
}
count++;
}
}
cout << "laisje" << target_1.size() << endl;
auto it = target_1.begin();
auto itt = target_2.begin();
for (; it != target_1.end(), itt != target_2.end(); it++, itt++)
{
cout << *it << " \t" << *itt << endl;
}
system("pause");
return 0;
}
2、获取文件中的一行或多行数据结果展示;
原始文件数据如下图所示:
代码结果如下:
说明1:代码结果中的第一行为零是因为文件中的第一行为非数字字符, 非数字字符在使用 atoi 函数把字符转化为数字时会被转化为零;
说明2:本文实现的是获取文件中的第一列和第二列数据,读者可根据自己需要自行获取对应列的数据;
读取 .csv 文件中的指定数据见: