Вопрос № 20583: Напишите пожалуйста как мне удалить определённую компоненту из файла
Например
у меня есть файл
в нём находятся цифры
1 2 3 4 5 6 7 8 9
я задал поиск и нашёл нужную мне компоненту допустим это цифра 4 как мне её удалить а остальные...
Вопрос № 20583
Напишите пожалуйста как мне удалить определённую компоненту из файла
Например
у меня есть файл
в нём находятся цифры
1 2 3 4 5 6 7 8 9
я задал поиск и нашёл нужную мне компоненту допустим это цифра 4 как мне её удалить а остальные оставить
Вариант считать все данные в массив там всё удалить, а после просто записать в файл не подходит, нужно сделать всё именно с помощью процедур seek, Filepos и т.д.
Заранее благодарю
Отправлен: 08.05.2005, 21:13
Вопрос задал: ger (статус: Посетитель)
Всего ответов отправлено: 3
Отвечает: John Freeman
Здравствуйте, ger!
Никак - с помошью write,filepos,seek это не сделать, можно только заменить 4 на что-то другое, для удаления со сдвигом надо переписывать всё, что идёт после цифры 4 и менять размер файла или собсивенно то что ты написал не подходит.
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 08.05.2005, 21:31
Отвечает: Repose
Здравствуйте, ger!
Даже не представляю, как это можно сделать. Хотя можно немножко схитрить: если знать позиции последнего элемента и элемента, которого нужно удалить, то надо последний записать туда, где находится "4". А потом с помощью truncate удалить последний элемент.
Ответ отправил: Repose (статус: 1-ый класс)
Отправлен: 09.05.2005, 17:56
Отвечает: Boriss
Здравствуйте, ger!
Если Вы открыли файл как типизированный
var
f: File of integer;
то write(f,i); не меняет положения других, а только значение это элемента.
Так что алгоритм должен быть таким:
1) нашли положение того элемента, что нужно удалить и пусть число элементов известно FileSize как и раз даст число элементов (!) - и запоминаете положение
2) а теперь пошли - считываете следующее и записываете "сюда"; увеличиваете положение
3) в конце нужно отсечь последний элемент
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 11.05.2005, 18:11