Skip to content

Instantly share code, notes, and snippets.

@drewxa
Last active April 17, 2018 07:18
Show Gist options
  • Save drewxa/29468aaee1ae9c9c7435d0e7ac616fa2 to your computer and use it in GitHub Desktop.
Save drewxa/29468aaee1ae9c9c7435d0e7ac616fa2 to your computer and use it in GitHub Desktop.

Типовое задание для РК 2

Задание

Требуется реализовать класс разбора текстового файла определенного формата и продемонстрировать его работу.

Задача 1

Реализуйте класс для хранения объектов. Объекты являются key-value хранилищем с дополнительным функционалом. Требуется реализовать:

  • метод для получения значения по ключу. Если такого ключа нет, метод генерирует исключение;
  • метод для изменения значения по ключу;
  • метод для получения всех ключей в объекте;
  • конструктор по умолчанию;
  • конструктор копирования;
  • оператор присваивания;
  • других публичных методов быть не должно.

Задача 2

Реализуйте класс, который загружает и сохраняет множество объектов класса из "задачи 1" в файл. Каждый такой объект имеет имя.

  • конструктор по умолчанию;
  • конструктор, принимающий путь до файла, если файл не соответсвует формату (описание формата ниже) - исключение;
  • метод для получения объекта по названию;
  • метод для добавления нового объект;
  • метод для получения всех имен объектов;
  • метод для удаления одного объекта по имени;
  • метод для удаления множества объектов по имени;
  • метод для сохранения объектов в файл в соответствующем формате.

Описание формата файла

Формат для представления структурированных данных.

В начале файла идет описание полей объектов. Начинается с идентификатора #Scheme. Дальше в каждой строке идут имена полей.

#Scheme // Идентификатор, что дальше идет описание полей объекта
"Name" // имя первого поля
"Group" // имя второго поля
"City" // имя третьего поля
...

После описания полей объектов идут сами объекты. Формат такой же - имя объекта задается после символа #. Имена объектов должны быть уникальными. Дальше в каждой строке идут значения полей. Важно, что значения полей это строка, которая содержится в двойных кавычках. Все, что не содержится в кавычках не является значением поля

#Student1 // имя объекта
"Ivanov"
"UI1"
"Moscow"

Пример 1

#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

Пример 2

Следующий пример демонстрирует некорректный формат.

  • названия поля Name стоит не в кавычках - ошибка
  • первый объект имеет слишком много полей, вместо положенных 3 у него 4 поля
  • второй объект имеет такое же название, как и первый - ошибка. Имена объектов должны быть уникальными
#Scheme
Name
"Group" 
"City" 

#Student1
"Ivanov"
"Error"
"UI1"
"Moscow"
#Student1
"Petrov"
"UI1"
"Sochi"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment