Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

удаление записи изи типизированного файла [D6, Win2k]


Timka ©   (2002-01-21 08:59:00) 

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


Timka   (2002-01-31 08:34:00) [1]

большое спасибо за Trunc(); теперь даже как-то неловко, типа, где же были мои глаза раньше...


Anatoly Podgoretsky   (2002-01-26 23:15:00) [2]

Фэ © (24.01.02 11:51)
Для таких объемов надо использовать или другие методы хранения или другие подходы к обработке данных, в то же время 100000 записей не очем не говорит, если размер записи маленький, скажем до 100 мегабайт, то можно весь файл хранить в памяти.

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


amamed_3071   (2002-01-24 12:23:00) [3]

използуй
BlockRead
BlockWrite
a потом Truncate


Alx2   (2002-01-24 12:13:00) [4]

На такие масштабы есть специализированные СУБД.
В крайнем случае, спасет индексирование/хэширование.
А решением проблемы скорости в общем случае (для любого количества записей), давно занимаются разработчики движков для БД. И бегать наперегонки с ними, думаю, нет резона.


DMN   (2002-01-24 12:10:00) [5]

Правильнее всего, видимо, комбинированный подход: если порядок записей не важен, то смело можно переписывать последнюю взамен удаленной. А если важен - расставлять атрибут "удалено" и время от времени перепаковывать файл, как делается в dBase, например. Есть еще более продвинутый вариант, со страничной организацией файла.


Фэ   (2002-01-24 11:51:00) [6]

Особенно впечатлит работа при числе записей несколько сот тысяч


DMN   (2002-01-24 11:40:00) [7]

Открываем файл, перемещаемся к последней записи, читаем ее, перемещаемся к удаляемой записи, записываем на ее место последнюю, перемещаемся к последней записи, обрезаем (или кастрируем?) файл. Он на одну запись короче, мы его не перезаписывали, нужную удалили.
Если порядок записей важен, то надо переписывать все записи после удаленной на одну назад, переписав последнюю - обрезаем файл...


Alx2   (2002-01-24 09:07:00) [8]

>Timka © (24.01.02 09:02)
"тут есть способ "отрезать" конец файла?"

Уж что, а способ конец отрезать, кажется, есть везде :)
Посмотрите в Delphi Help procedure Truncate(var F);


Timka   (2002-01-24 09:02:00) [9]

если ввести атрибут, усложнится взаимодействие с программами, а что касается жратвы, я ведь могу взять и отгрызть последнюю сосиску из Бухты. может и тут есть способ "отрезать" конец файла?
или как вариант - может есть способ по полю, вставленному в TCHekBox навести соответствие с записью в файле, указав какую-то ф-цию?


Фэ   (2002-01-21 19:59:00) [10]

Совет - попробуй вырезать нутрь у арбуза его не разрезая.
Если получиться, то и здесь будет надежда.


Vovochka_guest   (2002-01-21 09:05:00) [11]

Поставить/ввести атрибут у записи что она удалена?


Наверх

Титульная страница Поиск, карта сайта Написать письмо