【fishing-pan:https://blog.csdn.net/u013921430转载请注明出处】
前言
文件读入是数据处理中经常要用到的。很多数据的保存是按列保存的,例如我们常见的表格。那么,如何读取文本中特定的一列呢?本文以常见的txt文本为例,讲解一下如何读取文本中特定的某一列。
代码
为了方便讲解,我先把程序完整的代码给出,方便讲解。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
ifstream myfile("G:\\博客\\C++\\C++读取文本中的一列\\test.txt");
if (!myfile.is_open()){
cout << "Unable to open myfile";
system("pause");
exit(1);
}
vector<string> vec;
string temp;
while (getline(myfile, temp)) //利用getline()读取每一行,并按照行为单位放入到vector
{
vec.push_back(temp);
}
vector <float> radius;
cout << "读入的数据为 " << endl;
for (auto it = vec.begin(); it != vec.end(); it++)
{
cout << *it << endl;
istringstream is(*it); //用每一行的数据初始化一个字符串输入流;
string s;
int pam = 0;
while (is >> s) //以空格为界,把istringstream中数据取出放入到依次s中
{
if (pam == 5) //获取第六列的数据
{
float r = atof(s.c_str()); //做数据类型转换,将string类型转换成float
radius.push_back(r);
//cout << r << endl;
}
pam++;
}
}
cout << "读入的第6列数据为 " << endl;
for (auto it = radius.begin(); it != radius.end(); it++)
{
cout << *it << endl;
}
//cout << "successfully to open myfile";
system("pause");
return 1;
}
输入文本
输出结果
代码分析
文件读取
ifstream是文件读入流,头文件为fstream,相对应的还有文件写出流ofstream,文件读写流ftream。
代码中声明了一个输入流,并将其打开;
ifstream myfile("G:\\博客\\C++\\C++读取文本中的一列\\test.txt");
然后调用成员函数is_open(),判断文件是否被成功打开。
if (!myfile.is_open()){
cout << "Unable to open myfile";
system("pause");
exit(1);
}
按行读取文件中的内容
用getline()函数从打开的文件中,按照行读取;
getline(myfile,temp);
getline()函数的原型为:
istream&getline ( istream &is , string &str , char delim );
第一个参数是输入文件流;
第二个参数是传入的字符串;
第三个参数是结束标志符,即遇到某一个标识符停止读入,默认为换行符\n。
获取每一行中的内容
用读入的每一行的内容初始化一个字符串输入流;
istringstreamis(*it);
然后以空格为界限,从字符串输入流读入每一列;
is>> s;
最后转换类型,将数据放入vector中,结束后得到的vector中就包含了第6列的数据。
已完。。
建议大家自己把代码黏贴过去试一下就知道如何使用了。