天天看點

C++ 格式讀取檔案中的參數

C++中格式讀取檔案中的參數

參數檔案parameters.txt大概是這樣的形式

#Parameters

#sampling rate of frames(reference value:2-10) samplingRate 2

#mode of feature extraction videoSampleFeatureMode 13 videoSearchingFeatureMode 10

#7-12(general: 10)

#/home/lumeiqi/projects/newVideoRetrieval attention the enter key videoPath ../testvideo/test.mp4

其中#開頭行代表注釋,參數值有整數有字元串,記錄讀取代碼,備忘

代碼如下:

#include "Parameters.h"
#include <fstream>
#include <string>
#include <sstream>
#include <stdexcept>
#include <iostream>

int Parameters::readParameters(const char *filename)
{
    /*char buffer[2048];
    char paramName[100];
    int paramValue = 0;
    char paramValuestr[100];*/
    //避免使用C語言風格的字元數組,使用string,能省去很多問題
    //使用stringstream和ifstream做流式讀取會簡單很多

    stringstream buffer;
    string line;
    string paramName;
    int paramValue = ;
    string paramValuestr;

    ifstream fin(filename);
    if (!fin.good())
    {
        string msg("parameters file not found");
        msg.append(filename);
        throw runtime_error(msg);
    }
    while (fin.good())
    {
        getline(fin,line);
        if(line[] != '#')
        {
          buffer << line;//order is important
          buffer >> paramName;
          if(paramName.compare("samplingRate") == )
          {
         buffer >> paramValue;
         samplingRate = paramValue;
          }
          else if(paramName.compare("videoSampleFeatureMode") == )
          {
         buffer >> paramValue;
         videoSampleFeatureMode = paramValue;
          }
          else if(paramName.compare("videoSearchingFeatureMode") == )
          {
         buffer >> paramValue;
         videoSearchingFeatureMode = paramValue;
          }
          else if(paramName.compare("videoPath") == )
          {
         buffer >>paramValuestr;
         videoPath = paramValuestr;
          }
          else{
            throw runtime_error(string("unknown parameter: ").append(paramName));
        }

        }

      }
    fin.close();

}
           

繼續閱讀