Как передать переменные постоянным данным?

StackOverflow https://stackoverflow.com/questions/1090075

  •  11-09-2019
  •  | 
  •  

Вопрос

По сути, я хочу, чтобы моя программа извлекала различные переменные с жесткого диска для использования в программе.Думаю, прежде чем спрашивать подробности, мне следует убедиться, что это вообще возможно.Это?

Если да, то каков наилучший способ?Я видел использование файлов .ini, но не знаю, как получить данные именно из файлов .ini.Это то же самое, что и текстовый файл, с которым вы испортились, чтобы убедиться, что переменные всегда будут в строке x?Например:

ifstream variables("variables.ini");

//some code later
//assume line 'x' holds a variable

if(variables.good())
{
   variables.get(x);
}

//or whatever =/

Я как бы в растерянности, что здесь делать.

Редактировать:мой любимый язык — C++.

Это было полезно?

Решение

Первые вопросы, на которые вам нужно ответить, — это кто и почему.Ваши варианты на как будет следовать из тех.

Так кто (или что) будет иметь доступ к данным?Если это просто сама программа, вы можете хранить данные так, как хотите - двоичный файл, xml, базу данных, ini-файл и т. д.Однако если данные должны быть легко доступны пользователю, чтобы он мог изменить их перед запуском, тогда имеет смысл использовать текстовый файл, такой как ini, который можно легко редактировать.Чтобы редактировать данные, хранящиеся в других форматах, вам, возможно, придется написать совершенно отдельную программу только для управления сохраненными параметрами.Возможно, это имеет смысл в вашей ситуации, а может и нет, но это потребует больше работы.

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

Итак, что-то вроде этого:

[System]
    datapath = /home/me/data

[Application]
    start_count = 12
;   start_count = 20  //this is a comment

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

Существует множество способов сохранить разобранный файл в вашей программе.Самый простой способ — объединить имя раздела и ключ в ключ карты.Значение (пары ключ/значение) будет данными для карты.

Таким образом, «Systemdatapath» может быть одним ключом карты, а его значением будет «/home/me/data».Когда вашей программе необходимо использовать значения, она просто ищет их по ключу.

Это основы.В конечном итоге вам захочется его украсить.Например, методы для получения значений по типу.Например.getString(), getInteger(), getFloat() и т. д.

Другие советы

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

Редактировать:для С++ - http://xerces.apache.org/xerces-c/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top