Вроде несложно, но что - то не выходит, вот отрывок, который по идее удаляет 1 запись с номером n. Не знаю как всё это загнать в цикл (с eof вроде не выходит), выручайте. K изначально равен 1. Може что - то и не так написал, буду рад любой помощи!
for i := n+1 to filesize(f) do begin seek(f, i); read(f, rec); seek(f, i-1); write(f, rec); // перезаписываем следующую запись на место предыдущей end; seek(f, i, filesize(f) - 1); truncate(f); // последнюю запись убираем физически из файла
(набирал прямо здесь, так что могут быть огрехи, но смысл именно такой...)
Tan
24.03.2007 20:50
seek(f, i, filesize(f) - 1); 3 параметра ??
Добавлено через 4 мин. и на 2й строчке вашего кода выдаёт disk read error
volvo
24.03.2007 21:25
Да, все правильно... Вылетает за границы файла. Я ж говорю, что не проверено.
Вот этот код работает - только что проверял:
var f: file of integer; i, X, n: integer;
begin assign(f, '00100.dat'); rewrite(f); for i := 0 to 10 do begin write(f, i); end;
writeln('before:'); reset(f); while not eof(f) do begin read(f, X); writeln(X); end;
writeln('after:'); n := 5; // <--- Номер удаляемой записи, начиная с 0 !!!
for i := n+1 to pred(filesize(f)) do begin seek(f, i); read(f, X); seek(f, i-1); write(f, X); end; seek(f, filesize(f) - 1); truncate(f);
reset(f); while not eof(f) do begin read(f, X); writeln(X); end; close(f); end.
(переезжаем в "Задачи")
Tan
24.03.2007 21:29
огромное спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.