0

という名前のテキストファイルがあります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;

しかし、そのような方法で、後日、設定を追加することができます。私はあなたがそれをどのように行うかを理解することはできません=/

4

1 に答える 1

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 &ltrim(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;
   }
}
于 2012-11-07T03:39:34.257 に答える