Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со структурами 
:(
    Опции темы
Vit_as
Дата 17.4.2004, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.4.2004

Репутация: нет
Всего: нет



Помогите плиз решить два вопроса.
1). Аллокирование памяти для структуры. Есть файл куда заносятся данные.
struct Baze
{
char artist[30];
char kompoz[30];
int year;
char album[30];
};
2). Удаление одного элемента структуры из файла.
PM MAIL   Вверх
achmed
Дата 17.4.2004, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 12.4.2004

Репутация: нет
Всего: нет



не очень понятен вопрос, опиши задачу поподробней

PM MAIL   Вверх
mr.DUDA
Дата 17.4.2004, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



1) проблема с динамическим выделением памяти под объект ?
Цитата
Baze *obj = new Baze;
// или
Baze *obj = (Baze *)malloc(sizeof(Baze));

или с записью объекта в файл ?
2) если нужно вырезать кусок из файла, то придётся создавать новый файл, куда записывать фрагменты "до" и "после" вырезанного куска оригинального файла.

З.Ы.
Модератор: Пожалуйста, один топик - один вопрос.


--------------------
user posted image
PM MAIL WWW   Вверх
Vit_as
Дата 17.4.2004, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.4.2004

Репутация: нет
Всего: нет



Задача состоит в том что надо создать базу данных на С++ в консольном приложении, с использованием структуры. Запись в файл, просмотр базы, сортировку и поиск я уже сделал. Но память под массив ограничена (надо сделать выделение памяти). И плюс еще не знаю как делать удаление одного элемента структуры из файла.
PM MAIL   Вверх
sergejzr
Дата 17.4.2004, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Да, задал ты себе задачку...
Насколько я понимаю, ты хочешь создать что то типа Обьект-ориентированной ба3ы данных.
Посмотри тут для того , что бы представить как такой прототип работает, .
FastDB
(Очень радует, что создалэто наш соотечественник.)
Работа происходит примерно так:
  • Фаил маппается в память
  • там всё создаётся/удаляется
  • Фаил маппается на место.
При этом указателем на обьект является индех структуры в файле.
То есть грубо говоря:
Существует щапка файла где хранятся позиции первых структур в файле. Каждая структура содержит в себе данные плус позицию следующей структуры. Таким образом сохраняются не только сами данные, но и вспомогательные структуры индехаций (например B-Tree). Новый елемент добавляется в конец файла/массива (если массив, то в памяти он конечно должен быть гораздо больше самой БД).

Даже у этого человека в докторской работе обьект (структура) не удаляется физически (пришлось бы переписывать вес маппанный массив). На неё просто больше ни чего не указывает. Время от времени БД переписывается заново и тогда естесственно "мёртвые" обьекты не перенимаются.

Если тебе не принципиально создаватьэту беду самому, я бы (как уже много раз) предложилSQLite.
С небольшой модификацией туда можно складывать и структуры.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
maxim1000
Дата 17.4.2004, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
если нужно вырезать кусок из файла, то придётся создавать новый файл, куда записывать фрагменты "до" и "после" вырезанного куска оригинального файла.

ну не совсем smile.gif
если размер структуры постоянный (а если я не ошибаюсь, здесь именно такой случай), можно поступить так:
1. читаем последнюю запись в файле
2. записываем ее на место той, которую нужно удалить
3. теперь, когда у нас появилось две копии последней записи, обрезаем ту, которая в конце файла (тут даже где-то был топик, как это делать)
Цитата
Но память под массив ограничена (надо сделать выделение памяти)

если здесь имеется в виду массив всех записей, то читать его весь в оперативную память, как мне кажется, не совсем хорошая идея...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.