Требуется реализовать класс разбора текстового файла определенного формата и продемонстрировать его работу.
Реализуйте класс для хранения объектов. Объекты являются key-value хранилищем с дополнительным функционалом. Требуется реализовать:
- метод для получения значения по ключу. Если такого ключа нет, метод генерирует исключение;
- метод для изменения значения по ключу;
- метод для получения всех ключей в объекте;
- конструктор по умолчанию;
- конструктор копирования;
- оператор присваивания;
- других публичных методов быть не должно.
Реализуйте класс, который загружает и сохраняет множество объектов класса из "задачи 1" в файл. Каждый такой объект имеет имя.
- конструктор по умолчанию;
- конструктор, принимающий путь до файла, если файл не соответсвует формату (описание формата ниже) - исключение;
- метод для получения объекта по названию;
- метод для добавления нового объект;
- метод для получения всех имен объектов;
- метод для удаления одного объекта по имени;
- метод для удаления множества объектов по имени;
- метод для сохранения объектов в файл в соответствующем формате.
Формат для представления структурированных данных.
В начале файла идет описание полей объектов. Начинается с идентификатора #Scheme
. Дальше в каждой строке идут имена полей.
#Scheme // Идентификатор, что дальше идет описание полей объекта
"Name" // имя первого поля
"Group" // имя второго поля
"City" // имя третьего поля
...
После описания полей объектов идут сами объекты. Формат такой же - имя объекта задается после символа #
. Имена объектов должны быть уникальными.
Дальше в каждой строке идут значения полей. Важно, что значения полей это строка, которая содержится в двойных кавычках. Все, что не содержится в кавычках не является значением поля
#Student1 // имя объекта
"Ivanov"
"UI1"
"Moscow"
#Scheme
"Name"
"Group"
"City"
#Student1
"Ivanov"
"UI1"
"Moscow" some string "but " not a value
#Student 2
"Petrov"
"UI1"
"Sochi"
#Tutor
"Ivanov"
""
"Moscow"
Начало дает нам информацию о назвениях полей. Так каждый объект описан 3 полями: Name
, Group
, City
.
Дальше можно увидеть 3 объекта: Student1
, Student 2
, Tutor
. Разберем первый объект.
Объект Student1
обладает следующими полями:
- поле
Name
хранит значениеIvanov
- поле
Group
хранит значениеUI1
- поле
City
хранит значениеMoscow
Следующий пример демонстрирует некорректный формат.
- названия поля
Name
стоит не в кавычках - ошибка - первый объект имеет слишком много полей, вместо положенных 3 у него 4 поля
- второй объект имеет такое же название, как и первый - ошибка. Имена объектов должны быть уникальными
#Scheme
Name
"Group"
"City"
#Student1
"Ivanov"
"Error"
"UI1"
"Moscow"
#Student1
"Petrov"
"UI1"
"Sochi"