В виду того,что иногда программистам хочется размять свой мозг и сделать какие-либо упражнения, то они начинают их искать :). Приведу пример подобной задачки и я.
Цель задачи: Написать реализацию функции, которая возвращает значение параметра в виде std::string.
Вот прототип итоговой функции и используемого ею типа итератора:
typedef std::string::iterator StrItr_t;
std::string ExtractValue(StrItr_t & p, std::string & s)
Значением считать:
1) Одну и более строк, с возможным выделением значения в ковычки;
2) Символом переноса на новую строку считать '\', находящийся в конце строки, до привычного нам '\n', т.е. байта 0x0A и предваренный пробелом или табуляцией;
3) Строка начатая ковычкой, при перенесении на новую строку не выделяется повторно в ковычки на новой перенесенной строке;
4) Символами коментария считать ';', '#' и только если значение не выделено в ковычки;
5) Если значение взято в ковычки и встретилось s.end() значит все что успели прочитать считать результатом;
В результат не попадают:
1) Ковычки, которые выделяют значение;
2) Символы коментариев;
3) Привычный нам символ новой строк '\n', т.е. байт равный значению 0x0A, который физически делит строки;
4) Символ переноса '\' на следующую строку;
5) Символ вертикальной табуляции '\t'.
Показаны сообщения с ярлыком ini-файл. Показать все сообщения
Показаны сообщения с ярлыком ini-файл. Показать все сообщения
понедельник, 26 июля 2010 г.
пятница, 16 июля 2010 г.
Понимание устройства INI-файлов
Разрабатывая приложения,довольно часто сталкиваюсь с вопросом хранения настроек и конфигурирования работы приложения. Этот вопрос и стал причиной разработки класса по парсингу Ini-файла, пока мне хватает и на чтение.
При изучении строения ини-файла столкнулся с тем что каждая тулза работает по своему и четкого стандарта нет! Одни программисты привыкли к одним решениям, другие к другим.
Строение:
1) Могут иметься глобальные параметры, это параметры не принадлежащие какой-либо секции, т.е. описаны до первой секции
2) Секции определяются названием заключенным в квадратные скобки и их значением, состоящим из параметров и их значений
3) Параметры задаются именем и значением. Значение и имя разделяется символом '='
4) Значения могут быть очень большими и тогда очень удобно внедрить поддержку символа '\' означающего перенос на новую строку
5) Также для удобства сопровождения файлов существуют коментарии, как правило, это символы ';', '#'
6) Может возникнуть ситуация, когда символы относящиеся к специальным ';', '#', '\' нужно включить поддержку ковычек. Другими словами, если значение начинается с ковычек, то считать значением все пока не найдена закрывающая, т.е. самая последняя, после которой только пробелы, табуляци или конец строки, ну или пока не закончилась строка
Какие могут быть нюансы?
1) В файле могут быть две секции с одинаковыми названиями?
2) Стоит ли обрамлять в ковычки каждую новую перенесенную строку в ковычки?
Рекомендуемые ссылки:
1) ".ini"
2) "Cloanto Implementation of INI File Format"
При изучении строения ини-файла столкнулся с тем что каждая тулза работает по своему и четкого стандарта нет! Одни программисты привыкли к одним решениям, другие к другим.
Строение:
1) Могут иметься глобальные параметры, это параметры не принадлежащие какой-либо секции, т.е. описаны до первой секции
2) Секции определяются названием заключенным в квадратные скобки и их значением, состоящим из параметров и их значений
3) Параметры задаются именем и значением. Значение и имя разделяется символом '='
4) Значения могут быть очень большими и тогда очень удобно внедрить поддержку символа '\' означающего перенос на новую строку
5) Также для удобства сопровождения файлов существуют коментарии, как правило, это символы ';', '#'
6) Может возникнуть ситуация, когда символы относящиеся к специальным ';', '#', '\' нужно включить поддержку ковычек. Другими словами, если значение начинается с ковычек, то считать значением все пока не найдена закрывающая, т.е. самая последняя, после которой только пробелы, табуляци или конец строки, ну или пока не закончилась строка
Какие могут быть нюансы?
1) В файле могут быть две секции с одинаковыми названиями?
2) Стоит ли обрамлять в ковычки каждую новую перенесенную строку в ковычки?
Рекомендуемые ссылки:
1) ".ini"
2) "Cloanto Implementation of INI File Format"
Ярлыки:
application design,
ini-файл
Подписаться на:
Сообщения (Atom)