猜测.txt文件中数据的数据类型

时间:2015-06-03 12:00:24

标签: c++

我有一些数据文件。我想决定哪种类型的数据:如果每个都有一个数字我想把它推到矢量。但是,如果有一个数据现在是一个字符串,我想将其全部推送到矢量。我写了这样的话:

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*。有什么建议吗?

0 个答案:

没有答案