Своё хранилище данных
Ключи и значения в файле без внешних библиотек.
Код
// Пример работы с собственным, полностью написанным на "Сфере"
// хранилищем данных (стандартная_библиотека/хранилище.код) — без единой
// внешней библиотеки, в отличие от база_данных.код (обёртка над SQLite).
//
// Показывает весь набор операций: сохранить/получить, обновление значения
// (перезапись того же ключа), удаление, и честный признак отсутствия
// ключа.
подключить хранилище;
// ⚠️ Строки вида "текст строкаN = ..." перед каждым вывести(...) — не
// стилистический выбор, а обход известного, честно задокументированного
// ограничения (см. "Известные ограничения" в ДОКУМЕНТАЦИЯ_ЯЗЫКА.md):
// результат конкатенации текста, переданный НАПРЯМУЮ в вызов функции без
// промежуточной переменной, не попадает под отслеживание ARC и не
// освобождается — не крах, просто небольшая, безопасная утечка памяти.
функция главная(): целое
текст путь = "пример_хранилища.db";
сохранить(путь, "имя", "Никита");
сохранить(путь, "город", "Москва");
результат из текста имя = получить(путь, "имя");
если (имя.успешно)
текст строка1 = "имя: " + имя.значение;
вывести(строка1);
// Возвращённое значение — свежая, независимая копия (свой
// malloc-буфер, не ссылка внутрь файла) — освобождаем, когда
// больше не нужна, тем же принципом, что и результат
// прочитать_файл().
освободить_память(имя.значение);
конец
результат из текста город = получить(путь, "город");
если (город.успешно)
текст строка2 = "город: " + город.значение;
вывести(строка2);
освободить_память(город.значение);
конец
// Обновление — просто сохраняем тот же ключ заново; более поздняя
// запись "перекрывает" более раннюю при следующем поиске (файл
// растёт, append-only, но старое значение больше не будет найдено).
сохранить(путь, "имя", "Пётр");
результат из текста имя_после = получить(путь, "имя");
если (имя_после.успешно)
текст строка3 = "имя после обновления: " + имя_после.значение;
вывести(строка3);
освободить_память(имя_после.значение);
конец
удалить(путь, "город");
результат из текста город_после = получить(путь, "город");
если ( не город_после.успешно)
текст строка4 = "город после удаления: " + город_после.сообщение;
вывести(строка4);
конец
результат из текста отсутствует = получить(путь, "не_существует");
если ( не отсутствует.успешно)
текст строка5 = "несуществующий ключ: " + отсутствует.сообщение;
вывести(строка5);
конец
вернуть 0;
конец
Как запустить
Сохраните код в файл, например хранилище_пример.код, и выполните:
запустить хранилище_пример.код
Как это работает
подключить хранилище;даёт простое хранилище «ключ — значение», написанное на самой «Сфере».сохранить,получить,удалить: перезапись того же ключа обновляет значение.- Возвращённое значение нужно освободить через
освободить_память, когда оно больше не нужно.
Исходник лежит в репозитории: examples/хранилище/хранилище_пример.код.