Nano Hash - криптовалюты, майнинг, программирование

как хранить большие объемы текста?

Как следует хранить большие объемы текста, жестко закодированного в коде? в текстовом файле? В самом коде (в строке)? Или по-другому? например текст диалога справки

19.08.2013

  • Что вы подразумеваете под большими суммами и хардкодом. 20.08.2013
  • Мне нравится мой в холодильнике для пива в гараже. (с извинениями перед немецким народом, который находит холодное пиво неприятным). Ваш вопрос чрезвычайно расплывчатый. Это полностью зависит от цели приложения и требований к настройке. На этот вопрос нет однозначного ответа, кроме того, что лучше всего подходит для ваших нужд. 20.08.2013
  • под большими суммами я подразумеваю расстояние между абзацем и страницей, под жестко закодированными я подразумеваю нечто, установленное программистом, которое никогда не изменится 20.08.2013
  • Вы можете использовать ключевое слово const перед std::String, если его не нужно изменять. 20.08.2013

Ответы:


1

Пока «большие суммы» означают меньше мегабайт, я бы сказал, просто сохраните их в файле 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.";
19.08.2013

2

Абсолютно правильного ответа нет.

«Мягкое кодирование» будет означать, что вы сохраняете свою прозу как внешний текстовый файл, который вы можете прочитать при инициализации. Это имеет следующие преимущества:

  • Можно поменять прошу без перекомпиляции программы
  • Можно предлагать прошу на разных языках (выбрав соответствующий текстовый файл при инициализации)
  • Вы можете использовать стандартные средства проверки орфографии (в отличие от проверки орфографии вашего кода)
  • Непрограммист может поддерживать текстовый файл

Недостатки в том, что вам нужно следить за текстовым файлом и следить за тем, чтобы он был в правильном месте, с правильным именем и правильной кодировкой. Вам также может потребоваться зашифровать его или иным образом сделать нечетким.

«Жесткое кодирование» будет означать, что вы кодируете прозу в строку или эквивалент. Это имеет следующие преимущества:

  • Вы делаете это один раз и забываете навсегда (вам нужно поддерживать на один файл меньше, если вы делаете это непосредственно в основном коде, а не в заголовочном файле или отдельном исходном файле).

Конечно, недостатком является то, что каждый раз, когда вам нужно изменить его, вам нужно перекомпилировать свой код.

Итак, ответ - все, что работает для вас. Он не собирается меняться, и вы можете просто бросить его в строку? Сделай это. Стоит ли писать код для чтения файла и проверки его наличия, чтобы при необходимости можно было его изменить? Сделай это.

Ответ зависит от вас.

20.08.2013

3

Абзац или страница текста на самом деле не так уж и много. Единственным препятствием для сохранения его в виде строкового литерала является неловкость его указания в коде. Конкретные ограничения см. в разделе Максимальная длина строкового литерала?.

Хорошая особенность строковых литералов заключается в том, что вы можете соединить их вместе, оставив между ними только пробелы, и они будут объединены в одну строку.

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";
19.08.2013

4

Я не рекомендую вам хардкодить в программе как константы.

Если текст не является конфиденциальным, хорошей идеей может быть простой текстовый файл с парами ключ-значение. Имя ключа может быть именем переменной, которая будет содержать значение.

Например:

Quixote="Bla bla bla.........bla"
Hamlet="Bla bla bla ........bla"
EOF

Вы можете получить значения при запуске, и с помощью этого шаблона ваш исполняемый файл станет легче, а мегатексты можно будет легко поддерживать.

Если текст является конфиденциальным, вы можете использовать тот же шаблон, но зашифровать сохраненный текст и расшифровать его в начале.

19.08.2013

5

Если вы имеете в виду большие данные, вы можете сохранить их в двоичном виде. Это значительно уменьшает размер данных, хотя они не читаются человеком. Обычно это часто делается для числовых данных. Я действительно не понимаю "жестко запрограммированный". Обычно вы читаете исходные данные и указываете языку записать их в двоичном формате. (Вы должны думать о прямом и прямом порядке байтов, но большинство машин в наши дни имеют обратный порядок байтов)

19.08.2013
  • Двоичная форма может быть практически любой, и хранение текста в двоичной форме по своей сути не делает его меньше. Вы про компрессию? 20.08.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..