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();
}