понедельник, 26 июля 2010 г.

Значение параметра в ini-файле

В виду того,что иногда программистам хочется размять свой мозг и сделать какие-либо упражнения, то они начинают их искать :). Приведу пример подобной задачки и я.

Цель задачи: Написать реализацию функции, которая возвращает значение параметра в виде 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'.

Комментариев нет: