我有一些数据文件。我想决定哪种类型的数据:如果每个都有一个数字我想把它推到矢量。但是,如果有一个数据现在是一个字符串,我想将其全部推送到矢量。我写了这样的话:
ifstream dataFile;
dataFile.open(fileName);
if(!dataFile.good()){
cout<<"File with data cannot be open"<<endl;
return 0;
}
cout<<"File open correctly..."<<endl;
bool isString = false;
vector<double> doubleData;
while (!dataFile.eof()){
double f;
dataFile>>f;
if(!dataFile.fail()){
doubleData.push_back(f);
}
else{
cout<<"it's string"<<endl; //(*) always
isString = true;
break;
}
}
if(isString){
dataFile.close(); //(**) reopen a file
dataFile.open(fileName);
vector<string> stringData;
while (!dataFile.eof()){
string s;
dataFile>>s;
if(!dataFile.fail()){
stringData.push_back(s);
}
}
cout<<"String data:"<<endl;
for (int i = 0; i< stringData.size();i++){
cout<<stringData[i]<<endl;
}
//showTime(stringData);
return 0;
}
cout<<"double data:"<<endl;
for (int i = 0; i< doubleData.size();i++){
cout<<doubleData[i]<<endl;
}
//showTime(doubleData);
return 0;
我的代码总是到达行(*),因此假定它是字符串数据。我认为它到达eof()时。我对吗?如何解决?
还有一个:我需要重新打开我的文件(* line(**)*)才能正确地将数据读入stringData
。我猜可能是因为我在上一个while循环之后的文件末尾。我对吗?还有其他更优雅的方法吗?将文件中的光标移动到开头?我知道有fseek ( dataFile , 0 , SEEK_SET );
之类的东西,但我收到编译错误,因为我的dataFile是ifstream
而不是File*
。有什么建议吗?