У меня есть файл .cfg, и я хотел бы использовать переменную среды для настройки одного из полей.
directory=${HOME}/folder1/
Однако, когда я анализирую эту конфигурацию, это чтение ${HOME}
в виде строки, что явно не то, что я хочу.
Я написал свой собственный парсер на C ++, на случай, если мне понадобится что-то особенное. Прямо сейчас это очень простое c чтение и анализ.
void Config_Parser::parse_config_by_delimiter(string config, string delimiter) {
ifstream infile(config);
while (infile >> line) {
key = line.substr(0, line.find(delimiter));
value = line.substr(line.find(delimiter)+1);
if (this->config_settings.find(key) != this->config_settings.end()) {
cout << "Cannot use config... same key is set multiple times" << endl;
}
this->config_settings.insert({key, value});
}
}
Код, кажется, работает хорошо для всех других настроек конфигурации (все, что не использует переменную окружения), поэтому я не думаю, что его проблема с кодом. Но я нуб C ++ ie, так что он здесь в любом случае.
Когда я анализирую и распечатываю значение:
Фактический результат: ${HOME}/folder1/
Ожидается / желаемый выход: /home/my_dir/folder1/