Вроде несложно, но что - то не выходит, вот отрывок, который по идее удаляет 1 запись с номером n. Не знаю как всё это загнать в цикл (с eof вроде не выходит), выручайте. K изначально равен 1. Може что - то и не так написал, буду рад любой помощи!
seek(file1,n + k);
read (file1, REC);
seek (file1, n );
write (file1, REC);
inc (k);
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); // последнюю запись убираем физически из файла
seek(f, i, filesize(f) - 1); 3 параметра ??
Добавлено через 4 мин.
и на 2й строчке вашего кода выдаёт disk read error
Да, все правильно... Вылетает за границы файла. Я ж говорю, что не проверено.
Вот этот код работает - только что проверял:
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.
огромное спасибо!