Берем TStringList, у него реализована и вставка строки и удаление и добавление. Грузим в него файл.
Пишем функцию которая возвращает количество записей/блоков в этом TStringList.
Затем пишем функцию которая читает блок по его номеру. Например если "описание" - одна строка, то блок с номером 7 следует читать таким образом: читаем 3 строки из позиции (7*3)-1, т.е. строки с индексами 20,21,22. Ну и естественно перед чтением нужно проверять существует ли такой блок в файле, т.е. его номер не больше количества блоков.
Затем пишем вставку блока в конкретную позицию. Так же вставляем 3 строчки начиная от определенной позиции.
Ну и в оконцовке - удаление