| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Работа со структурами |
| Автор: Vit_as 17.4.2004, 09:04 |
| Помогите плиз решить два вопроса. 1). Аллокирование памяти для структуры. Есть файл куда заносятся данные. struct Baze { char artist[30]; char kompoz[30]; int year; char album[30]; }; 2). Удаление одного элемента структуры из файла. |
| Автор: achmed 17.4.2004, 10:04 |
| не очень понятен вопрос, опиши задачу поподробней |
| Автор: mr.DUDA 17.4.2004, 10:16 | ||
1) проблема с динамическим выделением памяти под объект ?
или с записью объекта в файл ? 2) если нужно вырезать кусок из файла, то придётся создавать новый файл, куда записывать фрагменты "до" и "после" вырезанного куска оригинального файла. З.Ы. Модератор: Пожалуйста, один топик - один вопрос. |
| Автор: Vit_as 17.4.2004, 10:37 |
| Задача состоит в том что надо создать базу данных на С++ в консольном приложении, с использованием структуры. Запись в файл, просмотр базы, сортировку и поиск я уже сделал. Но память под массив ограничена (надо сделать выделение памяти). И плюс еще не знаю как делать удаление одного элемента структуры из файла. |
| Автор: sergejzr 17.4.2004, 12:38 |
| Да, задал ты себе задачку... Насколько я понимаю, ты хочешь создать что то типа Обьект-ориентированной ба3ы данных. Посмотри тут для того , что бы представить как такой прототип работает, . http://www.garret.ru/~knizhnik/fastdb.html (Очень радует, что создалэто наш соотечественник.) Работа происходит примерно так:
То есть грубо говоря: Существует щапка файла где хранятся позиции первых структур в файле. Каждая структура содержит в себе данные плус позицию следующей структуры. Таким образом сохраняются не только сами данные, но и вспомогательные структуры индехаций (например B-Tree). Новый елемент добавляется в конец файла/массива (если массив, то в памяти он конечно должен быть гораздо больше самой БД). Даже у этого человека в докторской работе обьект (структура) не удаляется физически (пришлось бы переписывать вес маппанный массив). На неё просто больше ни чего не указывает. Время от времени БД переписывается заново и тогда естесственно "мёртвые" обьекты не перенимаются. Если тебе не принципиально создаватьэту беду самому, я бы (как уже много раз) предложилhttp://www.sqlite.org. С небольшой модификацией туда можно складывать и структуры. |
| Автор: maxim1000 17.4.2004, 18:33 | ||||
ну не совсем если размер структуры постоянный (а если я не ошибаюсь, здесь именно такой случай), можно поступить так: 1. читаем последнюю запись в файле 2. записываем ее на место той, которую нужно удалить 3. теперь, когда у нас появилось две копии последней записи, обрезаем ту, которая в конце файла (тут даже где-то был топик, как это делать)
если здесь имеется в виду массив всех записей, то читать его весь в оперативную память, как мне кажется, не совсем хорошая идея... |