如果需要对文件中的每行数据进行分别处理,比如,每行的格式是:
Name ID number1 number2...numberN
如果我们需要读取后面不定个数的int数值,并存储到数组里,C++似乎没有现成的函数或者操作符可以满足这个要求。
于是乎,自己动手写一个。
基本思想很简单,就是用getline将所有数值存储到一个string里,然后搜素string中的分割符,并把string依据分割符把内部的int值用stringstream全部提取出来。
//open the input file
ifstream infile;
string filename;
cout<<"Enter the datafile to process:"<<endl;
cin>>filename;
infile.open(filename);
if(infile.fail())
{
cout<<"Error"<<endl;
exit(1);
}
string name, ID;
while(!infile.eof())
{
string tmp;
getline(infile,name,'\t');
getline(infile,ID,'\t');
getline(infile, tmp);
// 定义一个vector来存储数值
vector<int> marks;
int pre_pos = 0;
for (int i=0; i < tmp.size(); i++)
{
string tmp_str;
if (tmp[i] == '\t') //'\t'可以替换为其他分隔符
{
stringstream r;
tmp_str = tmp.substr(pre_pos, i-pre_pos);
r << tmp_str;
int tt;
r >> tt;
marks.push_back(tt);
pre_pos = i + 1;
}
}
}