Как следует хранить большие объемы текста, жестко закодированного в коде? в текстовом файле? В самом коде (в строке)? Или по-другому? например текст диалога справки
как хранить большие объемы текста?
- Что вы подразумеваете под большими суммами и хардкодом. 20.08.2013
- Мне нравится мой в холодильнике для пива в гараже. (с извинениями перед немецким народом, который находит холодное пиво неприятным). Ваш вопрос чрезвычайно расплывчатый. Это полностью зависит от цели приложения и требований к настройке. На этот вопрос нет однозначного ответа, кроме того, что лучше всего подходит для ваших нужд. 20.08.2013
- под большими суммами я подразумеваю расстояние между абзацем и страницей, под жестко закодированными я подразумеваю нечто, установленное программистом, которое никогда не изменится 20.08.2013
- Вы можете использовать ключевое слово const перед std::String, если его не нужно изменять. 20.08.2013
Ответы:
Пока «большие суммы» означают меньше мегабайт, я бы сказал, просто сохраните их в файле std::string
. Вы не получите лучшего ответа без более подробной информации.
Учитывая ваш комментарий:
под большими суммами я подразумеваю расстояние между абзацем и страницей, под жестко закодированными я подразумеваю нечто, установленное программистом, которое никогда не изменится
Похоже, вы хотите хранить небольшое количество прозы. Вы определенно захотите сохранить это в const std::string
:
const std::string ipsum =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec massa mauris.\n"
"Maecenas luctus venenatis mauris, ut pulvinar nisl ultricies sed. Mauris\n"
"adipiscing aliquet massa id dapibus. Praesent leo nisl, sollicitudin quis\n"
"sodales in, mattis ac tortor. Phasellus semper vehicula nibh sit amet pulvinar.\n"
"Nam faucibus, turpis non feugiat consequat, massa lacus euismod lorem, in\n"
"viverra orci justo a odio.";
Абсолютно правильного ответа нет.
«Мягкое кодирование» будет означать, что вы сохраняете свою прозу как внешний текстовый файл, который вы можете прочитать при инициализации. Это имеет следующие преимущества:
- Можно поменять прошу без перекомпиляции программы
- Можно предлагать прошу на разных языках (выбрав соответствующий текстовый файл при инициализации)
- Вы можете использовать стандартные средства проверки орфографии (в отличие от проверки орфографии вашего кода)
- Непрограммист может поддерживать текстовый файл
Недостатки в том, что вам нужно следить за текстовым файлом и следить за тем, чтобы он был в правильном месте, с правильным именем и правильной кодировкой. Вам также может потребоваться зашифровать его или иным образом сделать нечетким.
«Жесткое кодирование» будет означать, что вы кодируете прозу в строку или эквивалент. Это имеет следующие преимущества:
- Вы делаете это один раз и забываете навсегда (вам нужно поддерживать на один файл меньше, если вы делаете это непосредственно в основном коде, а не в заголовочном файле или отдельном исходном файле).
Конечно, недостатком является то, что каждый раз, когда вам нужно изменить его, вам нужно перекомпилировать свой код.
Итак, ответ - все, что работает для вас. Он не собирается меняться, и вы можете просто бросить его в строку? Сделай это. Стоит ли писать код для чтения файла и проверки его наличия, чтобы при необходимости можно было его изменить? Сделай это.
Ответ зависит от вас.
Абзац или страница текста на самом деле не так уж и много. Единственным препятствием для сохранения его в виде строкового литерала является неловкость его указания в коде. Конкретные ограничения см. в разделе Максимальная длина строкового литерала?.
Хорошая особенность строковых литералов заключается в том, что вы можете соединить их вместе, оставив между ними только пробелы, и они будут объединены в одну строку.
const char * paragraph =
"'Twas brillig, and the slithy toves" "\n"
"Did gyre and gimble in the wabe;" "\n"
"All mimsy were the borogoves," "\n"
"And the mome raths outgrabe." "\n";
Я не рекомендую вам хардкодить в программе как константы.
Если текст не является конфиденциальным, хорошей идеей может быть простой текстовый файл с парами ключ-значение. Имя ключа может быть именем переменной, которая будет содержать значение.
Например:
Quixote="Bla bla bla.........bla"
Hamlet="Bla bla bla ........bla"
EOF
Вы можете получить значения при запуске, и с помощью этого шаблона ваш исполняемый файл станет легче, а мегатексты можно будет легко поддерживать.
Если текст является конфиденциальным, вы можете использовать тот же шаблон, но зашифровать сохраненный текст и расшифровать его в начале.
Если вы имеете в виду большие данные, вы можете сохранить их в двоичном виде. Это значительно уменьшает размер данных, хотя они не читаются человеком. Обычно это часто делается для числовых данных. Я действительно не понимаю "жестко запрограммированный". Обычно вы читаете исходные данные и указываете языку записать их в двоичном формате. (Вы должны думать о прямом и прямом порядке байтов, но большинство машин в наши дни имеют обратный порядок байтов)