🔥5
Покажу простой способ прочитать .ini с ключами вида section.key=value и собрать результат в удобную структуру.
Сначала подготовим типы данных и функцию разбиения строки по символу равно.
#include <string>
#include <unordered_map>
#include <fstream>
#include <sstream>
using Cfg = std::unordered_map<std::string, std::string>;
std::pair<std::string, std::string> splitEq(const std::string& s) {
auto p = s.find('=');
if (p == std::string::npos) return {s, ""};
return {s.substr(0, p), s.substr(p + 1)};
}
Теперь читаем файл построчно пропускаем пустые и комментарии и собираем ключи section.key.
Cfg loadIni(const std::string& path) {
Cfg cfg;
std::ifstream in(path);
std::string line, section;
while (std::getline(in, line)) {
if (line.empty()) continue;
if (line[0] == '#' || line[0] == ';') continue;
if (line.front() == '[' && line.back() == ']') {
section = line.substr(1, line.size() - 2);
} else {
auto kv = splitEq(line);
std::string key = section.empty() ? kv.first : section + "." + kv.first;
cfg[key] = kv.second;
}
}
return cfg;
}Финальный шаг получаем значение по ключу и используем дефолт если его нет.
std::string getOr(const Cfg& c, const std::string& k, const std::string& d) {
auto it = c.find(k);
if (it == c.end()) return d;
return it->second;
}
int main() {
auto cfg = loadIni("app.ini");
std::string host = getOr(cfg, "server.host", "127.0.0.1");
std::string port = getOr(cfg, "server.port", "8080");
std::cout << host << " " << port << "\n";
}🧩 Такой формат читабелен и прост в поддержке. Если нужно больше контроля добавь трим пробелов и валидацию типов на этапе чтения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Проверка скобок нужна, чтобы не кормить парсер битой строкой и рано отбрасывать ошибки. В уроке собран минимальный код, который легко вставить в валидацию перед разбором выражения.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Полезно для:
✓ Временных файлов✓ Запуска подпроцессов✓ Тестовой изоляцииСмена рабочей директории упрощает доступ к нужным ресурсам без длинных путей. Держите в голове что операция влияет на весь процесс и все потоки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Пул снижает давление на аллокатор и ускоряет горячие пути, где создаются однотипные объекты. В карточках разобран минимальный шаблон выдачи по индексу и ручной буфер с выравниванием для случаев, когда нужен полный контроль.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
В этом посте расскажу про std::copy() и как правильно её использовать.
Обычно эту функцию используют для:
✓ Копирования диапазонов✓ Переноса данных✓ Обновления буферовPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM