Удаление записи из типизированного файла. - Pascal
Формулировка задачи:
Какими способами можно реализовать данную задачу? Из типизированного файла нужно удалить запись, номер которой указывается пользователем. Программу писать не обязательно, просто подкиньте идею =)
Решение задачи: «Удаление записи из типизированного файла.»
textual
Листинг программы
procedure DelZap(var f:t_file);
var n,i:integer;
rab:rabotnik;
begin
write('Удалить запись № ');
readln(n);
ResFile(f);
if (filesize(f)<n)or(n<0) then
begin
writeln('В файле нет такой записи');
close(f);
write('Press Enter...');
readln;
exit;
end;
seek(f,n-1);
for i:=n-1 to filesize(f)-2 do
begin
seek(f,i+1);
read(f,rab);
seek(f,i);
write(f,rab);
end;
seek(f,filesize(f)-1);
truncate(f);
close(f);
write('Press Enter...');
readln
end;
Объяснение кода листинга программы
- Создается процедура DelZap, которая принимает в качестве параметра файл (переменная f типа t_file).
- Выводится сообщение «Удалить запись №» и считывается число n.
- Вызывается функция ResFile(f), которая перезаписывает файл.
- Проверяется условие: если размер файла (filesize(f)) меньше n или n меньше 0, то выводится сообщение «В файле нет такой записи» и файл закрывается.
- Если условие не выполняется, то файл открывается заново, и его позиция устанавливается в n-1.
- Затем в цикле for происходит следующее:
- seek(f,n-1) устанавливает позицию чтения/записи файла в n-1.
- for i:=n-1 to filesize(f)-2 do
- seek(f,i+1) устанавливает позицию чтения/записи файла в i+1.
- read(f,rab) считывает данные из файла в переменную rab.
- seek(f,i) устанавливает позицию чтения/записи файла в i.
- write(f,rab) записывает данные из переменной rab в файл.
- end;
- seek(f,filesize(f)-1) устанавливает позицию чтения/записи файла в конец файла.
- Вызывается функция truncate(f), которая обрезает файл.
- Файл закрывается с помощью функции close(f).
- Выводится сообщение «Press Enter...».
- Считывается символ новой строки с помощью функции readln.
- Программа завершается.