![]() |
Pascal:удаление записи из файла.
Всем привет!
Столкнулся с проблемой. Пишу телефонную книжку.Вроди, как ввод и вывод нормально работают, а вот со стираньем записи из файла беда. Подсказали,что можно сделать, так как в этом примере, но у меня не работает. В программе создаётся тип свой переменной: type zapis=record imia:string[20]; fam:string[20]; god_r:string[20]; ulica:string[20]; kvartira:string[20]; tel:string[20]; end; ..... var p:zapis; duom : file of zapis; Вся инфорамция записывается в эти переменные, нормально выводится. Вот сама проблематичная проблема стирания: Код:
unit d_tr;Спасибо! |
Самый простой способ - в твой тип
type zapis=record ..... добавь еще одно поле "Признак удаления". И изменяй его и проверяй! |
Быстро удалить запись из файла можно перемещением
т.е. последнюю запись в файле переписывают на место удаляемой, а затем уменьшают длину файла на одну запись. В вашем примере так и сделано. Только удаляется следующая за нужной запись seek(doum,i). Последнюю запись условие if i>filesize(duom)-1 не даст удалить. Люди привыкли все считать начиная с 1 , а записи в файле считаются с 0. второй reser(doum) лишний. |
MrSerg, ты имеешь в виду, что процедура должна выглядить так:
Код:
|
Только еще seek(doum,i-1); и вполне рабочая версия.
|
MrSerg,хм... странно. но почему то он удолять так и не хочет. Всегда пишет,что книжка пуста ;(
|
Цитата:
1. файл c:\duomenys.txt не существует. 2. размер фала меньше чем одна запись. 3. файл защищен от записи. Добавьте в начало программы {$I+} I/O checking будут выдаваться сообщения об ошибках при операциях с файлом. |
заметил такую вещь, что эта процедура удаляет только почему то телефоны с коротким номером, к примеру 1, а когда в списле есть номера с более длинным номером, то последний уже не видит ;(
Да, и ещё заметил, когда в списке длинный и короткмй номер, то при попытке стиреть короткмй - стирается длинный :confused: Что де делать ;( ? |
| Часовой пояс GMT +4, время: 22:53. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.