Разработать программу, читающую конфигурацию из текстового файла.
Конфигурационный файл представляет собой текстовый файл, где строки имеют формат ключ значение
. И ключ, и значение представляют собой строки:
name foo
value 20
Лишние пробелы игнорируются, также допустимы пустые строки:
name foo
value 20
Допустимы комментарии:
foo 200 # 400
#bar 400
Все символы, начиная с #
, считаются пробельными и игнорируются.
Для задания значений с пробелами можно использовать следующую форму:
name " Vasya Pupkin " # пробелы в начале и конце строки
spaces ' ' # здесь 5 пробелов
Строки, содержащие символы '
и "
, могут быть записаны следующим образом:
double_quote '"'
single_quote "'"
both_quotes "'\""
Обратная косая черта \
играет роль escape-символа (аналогично C) и позволяет задавать следующие спецсимволы (при употреблении внутри закавыченной строки "…"
или '…'
):
\'
– одиночная кавычка;\"
– двойная кавычка;\n
– символ перевода строки (ASCII-код 10);\t
– символ табуляции (ASCII-код 9).\\
— сам символ обратной косой черты.Реализовать программу которая бы читала конфигурационный файл из входного файла и записывала результат в выходной файл.
Ошибки, связанные с неверным синтаксисом, нужно также выводить в выходной файл, но в самом конце.
Конфигурация
<ключ> - <значение>
...
Ошибки
<строка с неверным синтаксисом 1>
<строка с неверным синтаксисом 2>
...
Для всех разработанных модулей должны быть созданы наборы unit тестов. Функций ввода/вывода нужно тестировать с помощью std::stringstream
.