IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Record, удаление записи
Tan
сообщение 24.03.2007 15:40
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Вроде несложно, но что - то не выходит, вот отрывок, который по идее удаляет 1 запись с номером n. Не знаю как всё это загнать в цикл (с eof вроде не выходит), выручайте. K изначально равен 1. Може что - то и не так написал, буду рад любой помощи!

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



--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 24.03.2007 16:31
Сообщение #2


Гость






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 16:50
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


seek(f, i, filesize(f) - 1); 3 параметра ??

Добавлено через 4 мин.
и на 2й строчке вашего кода выдаёт disk read error

Сообщение отредактировано: Tan - 24.03.2007 16:51


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.03.2007 17:25
Сообщение #4


Гость






Да, все правильно... Вылетает за границы файла. Я ж говорю, что не проверено.

Вот этот код работает - только что проверял:
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 17:29
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


огромное спасибо!


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.06.2025 17:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"