Помощь - Поиск - Пользователи - Календарь
Полная версия: Record
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Tan
Вроде несложно, но что - то не выходит, вот отрывок, который по идее удаляет 1 запись с номером n. Не знаю как всё это загнать в цикл (с eof вроде не выходит), выручайте. K изначально равен 1. Може что - то и не так написал, буду рад любой помощи!

seek(file1,n + k);
read (file1, REC);
seek (file1, n );
write (file1, REC);
inc (k);

volvo
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
seek(f, i, filesize(f) - 1); 3 параметра ??

Добавлено через 4 мин.
и на 2й строчке вашего кода выдаёт disk read error
volvo
Да, все правильно... Вылетает за границы файла. Я ж говорю, что не проверено.

Вот этот код работает - только что проверял:
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
огромное спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.