Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Вопрос касается удаления записи из типизированного файла.   Найти похожие ветки 

 
Drone   (2007-02-05 15:13) [0]

Уважаемые,решаю тестовую задачу.Нужно реализовать консольный телефонный справочник.Команды аdd,find сделал,при этом информацию храню в типизир.файле.Как реализовать удаление записи из этого файла?


 
Desdechado ©   (2007-02-05 15:20) [1]

Заведи в своем типе поле-признак удаленности.
И команду pack для очистки файла от удаленных.


 
Elen ©   (2007-02-05 15:20) [2]


> Как реализовать удаление записи из этого файла?

Переписать его заново без этой записи.


 
Leff ©   (2007-02-05 15:23) [3]

Есть два варианта:
1. Смещать все данные в файле после записи на позицию этой записи - в случае с большим файлом долго
2. Добавить в запись признак "удаленности", т.е. для удаления достаточно в нужной записи проставить этот признак, после чего ее можно будет использовать для записи других значений - тут требуется реализовать чуть больше логики


 
Elen ©   (2007-02-05 15:24) [4]


>  в случае с большим файлом долго

Не обязательно.


 
Drone   (2007-02-05 15:26) [5]

Какая последовательность действий должна быть при таком способе?Открывать основной файл,создать новый,записать в него необходимые записи,закрыть основной,удалить основной,сохранить новый под именем основного?


 
Elen ©   (2007-02-05 15:28) [6]


> Drone

Зачем. Запиши данные в массив в память а потом пропускай запись ненужных в файл, или считай следующие записи за удаленной, а в файле передвинься на позицию за удаленной (seek) и запиши что считал


 
Drone   (2007-02-05 15:31) [7]

Спасибо..Буду разбираться.


 
Leff ©   (2007-02-05 15:32) [8]

> [4] Elen ©   (05.02.07 15:24)
>
> >  в случае с большим файлом долго
>
> Не обязательно.


хотя да, если не требуется сохранять последовательность записей :)
можно просто перенести последнюю запись на место записываемой
естественно все это при условии что записи постоянной длины


 
Elen ©   (2007-02-05 15:37) [9]


> Leff

Да. Вообще то для этого есть СУБД разные, чем свое лепить лучше обратиться к ним.


 
Drone   (2007-02-05 15:38) [10]

То есть если я объявил следующим образом:
Type
TContact=packed record
Name:string[20];
Number:string[20];
end
то можно просто последнюю запись двигать на место удаляемой и не париться?


 
Drone   (2007-02-05 15:40) [11]

Я вот тоже думаю...Зачем я файлом начал париться?Взял бы лучше простенькую аccеss базу.


 
RASkov   (2007-02-05 16:26) [12]

> [11] Drone   (05.02.07 15:40)

Можно такую логику:

например файл из 10 записей, удаляем 3-ю:

встаем на последнию (10) читаем ее значения во врем. перем.
перемещаемся на 3-ю
меняем значение из врем. перем.
Seek на предпоследнюю
Truncate

Порядок следования при удалении будет меняться...



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
2-1170545848
ssss
2007-02-04 02:37
2007.02.25
программу во все окно!


15-1170412945
boriskb
2007-02-02 13:42
2007.02.25
Просто бизнес. Ничего личного.


15-1170451847
votija
2007-02-03 00:30
2007.02.25
SQL файла и PHP


11-1148619176
igorek_2005
2006-05-26 08:52
2007.02.25
Как создать TToolBar?


1-1168080596
Calibr
2007-01-06 13:49
2007.02.25
TWebBrowser без картинок