我有一个名为settings.txt
的文本文件。在里面我有它说:
Name = Dave
然后我打开文件并循环播放脚本中的行和字符:
std::ifstream file("Settings.txt");
std::string line;
while(std::getline(file, line))
{
for(int i = 0; i < line.length(); i++){
char ch = line[i];
if(!isspace(ch)){ //skip white space
}
}
}
我想要解决的是将每个值分配给某种变量,这些变量将被视为游戏的“全局设置”。
所以最终的结果是:
Username = Dave;
但是以这种方式我可以在以后添加额外的设置。我无法弄清楚你会怎么做= /
答案 0 :(得分:2)
要添加额外设置,您必须重新加载设置文件。通过在std :: map中保持设置,可以添加新设置或覆盖现有设置。这是一个例子:
#include <string>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <functional>
#include <cctype>
#include <locale>
#include <map>
using namespace std;
/* -- from Evan Teran on SO: http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring -- */
// trim from start
static inline std::string <rim(std::string &s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
return s;
}
// trim from end
static inline std::string &rtrim(std::string &s) {
s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
return s;
}
// trim from both ends
static inline std::string &trim(std::string &s) {
return ltrim(rtrim(s));
}
int main()
{
ifstream file("settings.txt");
string line;
std::map<string, string> config;
while(std::getline(file, line))
{
int pos = line.find('=');
if(pos != string::npos)
{
string key = line.substr(0, pos);
string value = line.substr(pos + 1);
config[trim(key)] = trim(value);
}
}
for(map<string, string>::iterator it = config.begin(); it != config.end(); it++)
{
cout << it->first << " : " << it->second << endl;
}
}