Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 11:07   #1
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию Записать в ::map ini-файл

Есть большой ini-файл, в ListView вывожу название секций, при выборе конкретной строки списка вывожу соответствующие значения ключей (текстом в ListBox). Получается, при каждом выборе строки идет обращение к ini-файлу. Можно ли предварительно весь ini-файл записать в std::map? Ключами будут названия секций (они уникальны). Все еще усложнятся из-за того, что в разных секциях бывает разное число ключей path<i>:

[section1]
name = "Имя1"
path0 = "c:\\path1\\"

[section2]
name = "Имя2"
path0 = "c:\\folder\\"
path1 = "c:\\folder2\\"

Одним словом, нужно что-то такое:
map<string, {сложная_структура} > MyMap;
Если такое возможно реализовать, то как это сделать?

Последний раз редактировалось Qwe1; 18.08.2011 в 11:33.
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 11:38   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

то есть ключ имеет тип 1 или 2 или 3 ... я так понял
а значение
Код:
name = "Имя1"
path0 = "c:\\path1\\"
или
Код:
name = "Имя2"
path0 = "c:\\folder\\"
path1 = "c:\\folder2\\"
так ?

вы же сами написали "разное число ключей path<i>", то бишь индекс какбы намекает, что структура может иметь такой вид
Код:
class section {
std::string name;
str::vector<std::string> paths;
// методы ...
};
а пример входного файлика можно?
onewho вне форума Ответить с цитированием
Старый 18.08.2011, 11:48   #3
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию

Я именно в c++ не силен, диалог и вся обработка у меня идет на WinAPI, все операции по работе с ::map я бы (по возможности) реализовывал без классов. Название секций (section1, section2, ...) - это я так понимаю готовые ключи для ::map. Для "path<i>" вектор подойдет, я уже об этом думал. Получается структура данных на одну секцию. И как map использовать со структурой?
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 11:52   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Вы можете объяснить, что будет ключом, а что значением (name/path)?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 18.08.2011, 11:59   #5
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию

А можно сделать ключом - название секций? По этому ключу получаю структуру со значениями соответствующей секции ini-файла? Например: ключ "section2", по нему нахожу элемент структуры paths (string), где будут 2 элемента (path0, path1)? Или так нельзя?
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 12:07   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Можно сделать так:
Код:
map<string /* name */, vector<string> /* pathes */>
Если имена - уникальны.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 18.08.2011, 12:21   #7
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию

А как быть с остальными значениями? Вот пример входного файла.
Вложения
Тип файла: txt example.ini.txt (340 байт, 128 просмотров)

Последний раз редактировалось Qwe1; 18.08.2011 в 12:23.
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 12:50   #8
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ну ключ уже как я понял будет std::string, а нет возможности перед списком paths указывать их количество?
просто без этого быдлокод выйдет. надо будет проводить анализ каждой прочитанной строчки на [ ] например.
onewho вне форума Ответить с цитированием
Старый 18.08.2011, 13:07   #9
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию

Предположим, что есть количество (правда, в идеале, надо проверять - правильное или нет). Что это меняет? Типа берем все-таки вектор, а не структуру и первые 3 значения вектора считаем, что это "name", "color" и "cast", а все последующие - это "path<n>"?
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 13:20   #10
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

будет структура, а ней вектор
поля структуры:
Код:
	std::string name;
	std::string color;
	size_t cost;

	std::vector<std::string> paths;
читаете имя секции, читаете остальные данные во временную структуру.
читаете число путей.
нужное число раз - push_back пути.
по этому ключику data[<имя секции>] = <название структуры>(имя временной структуры) всё добавили.

и всё это в цикле.

ток строчки ещё парсить придется. то бишь читать только то, что после знака =
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьный файл F. Записать в файл G компоненты файла F в обратном порядке,сначала все нечетные, затем чётные. Паскаль. ICE_LADY Помощь студентам 0 08.06.2011 17:32
Ini файл Baaandit Общие вопросы Delphi 8 23.11.2009 14:30
Записать hotkey в ini Михаил Юрьевич Общие вопросы Delphi 6 29.03.2009 22:51
Как записать файл в файл программы? Хамяг Общие вопросы Delphi 2 02.11.2008 16:01
ini файл Simply-Art Общие вопросы Delphi 3 17.06.2007 14:43