§ 9. Форматированный и двоичный ввод/вывод
Задания
- Напишите программу, которая читает конфигурационный файл и записывает считанные ключи и значения в таблицу. Файл имеет формат «ключ=значение»:
x=10 y =5 z = 6 q = abc
Ключу и значению может предшествовать любое количество пробелов. За ключом и значением может следовать любое количество пробелов. Предшествующие и следующие пробелы не являются частью ключа и значения. Пробелы определяются с помощью функцииstd::isspace
. Ключ и значение должны находится на одной строке. Таблица хранится в классеstd::unordered_map<std::string,std::string>
. - Напишите модульные тесты для проверки корректности работы программы. Для этого воспользутесь классом
std::stringstream
для создания потока из строки символов. - Создайте класс
ln80c_buffer
как подклассstd::streambuf
, который ограничивает длину строки 72-мя символами и нумерует строки в порядке их вывода в поток. Для простоты предположите, что символ перевода строки'\n'
не будет выводится в этот буфер.- Для записи номера строки используются первые 8 символов и функцию
std::sprintf
. - Ваш класс должен использовать массив
char line[81]
в качестве буфера (длину массива можно выбрать другую). - Ваш класс является фильтром, то есть запись символов в файл или в строку осуществляет через стандартный буфер
std::stringbuf
илиstd::filebuf
, указатель на который передается в ваш класс. - Для проверки напишите модульный тест, в котором ваш класс используется в качестве буфера для
std::ostream
.
out << "1234567890"
должен вывести строки12345 67890
при условии, что ограничение не 72, а 10 символов. - Для записи номера строки используются первые 8 символов и функцию
- Напишите программу, которая записывает в файл массив (
std::vector
) из следующих структур.struct Kernel { int32_t id; int32_t parent_id; int32_t target_id; std::string name; uint64_t payload_size; std::unique_ptr<char[]> payload; };
Запись ведется в двоичном виде, порядок байт — big-endian. Затем считайте из файла массив и проверьте, что он правильно считался. Программа должна быть написана в виде модульного теста.