Хакер ты предложил, на сколько я помню, правильный принцип. Но не решение. И - в плане кода - не самое простое.
Самое простое решение предложил я
В нем есть недостатки (избыточность данных и сложность редактирования файла), но для этой задачи его хватает за глаза. Твой вариант более правильный, но он и более сложный.
Лаборатор Где ты увидел, что меня сильно раскритиковали? Просто показали недостатки моего подхода. Которые для твоей задачи - совершенно не существенны. Избыточность? Ну, может и будет заметна, если перевалить за пару сотен мегов
Сложность редактирования?
iGrok показал, как это довольно легко обойти, если вдруг всё-таки понадобится.
Зато доступ к данным - мгновенный, и ничего парсить или шифровать не надо, загружается - только нужная запись, а не вся база. Главное достоинство - простота использования и минимум кода.
В общем мой примерчик - это почти готовое решение для тебя. И если оно кажется тебе слишком сложным, то уж решение Хакера точно сложнее
iGrokiGrok писал(а):SAFEARRAY, заголовки строк. При наличии множества мелких строк - это офигенный лишний вес.
SAFEARRAY можно вообще исключить - если в структурке хранить ответы не массивом, а одной, разбитой нулями, строкой (даже короче получится, чем длины хранить), а смещения и так и этак нужны.
Если уж так нужно сэкономить, то можно ещё немного поступиться простотой и хранить каждую запись не структуркой, а одной нулями разбитой строкой: первая часть - вопрос, остальные - ответы, три-четыре первых байта - зашифрованный номер ответа.
А если ещё усложнить и раздельно хранить вопросы с ответами (чтобы можно было отдельно их читать), то уже совсем будет рукой подать до варианта Хакера
Кстати, если все строки хранить отдельно, может ещё и больше избыточность будет: смещения-то нужно будет для каждой стоки, а не как у меня - для всей структурки, так что сэкономить удастся, только если много повторяющихся строк.