Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Вниз
Типизованные файлы Найти похожие ветки
← →
Алексей (2004-03-06 10:36) [0]Народ, подскажите, если можно по подробнее, как можно удалить запись из типизованного файла???
← →
Alex Konshin © (2004-03-06 10:37) [1]В общем случае - записать в новый файл все, кроме без этой записи.
← →
Алексей (2004-03-06 10:41) [2]Это не выход, есть кое какие наброски. Но это тоже не устраивает. Нуден конкретный алгоритм, желательно с кодом.
← →
Alex Konshin © (2004-03-06 10:46) [3]Ну можешь чуть оптимизировать - перезаписывать только часть файла после этой записи. Для каких-то специфических случаев можно еще придумать какую-то оптимизацию, но в общем случае - только так.
Чудес не бывает. Ты просто представь, как эти данные на диске хранятся и делай выводы.
← →
Булат Шакиров (2004-03-06 10:59) [4]Может так:
"открываете файл, как бинарный, составляете список длин записей, и копируете куски файла в другой с помощью BlockRead/BlockWrite"
← →
Rouse_ © (2004-03-06 11:06) [5]> [4] Булат Шакиров (06.03.04 10:59)
Обьясни мне плз ламеру, что есть бинарный файл, и чем от отличается от обычного текстового?
(Я только завтра начну учиться программированию)
← →
Alex Konshin © (2004-03-06 11:07) [6]И почему это будет не копирование в новый файл без этой записи?
← →
Rouse_ © (2004-03-06 11:08) [7]> копируете куски файла в другой
К чему подобное расточительство? - так пустячок?
← →
Anatoly Podgoretsky © (2004-03-06 11:39) [8]Предстась что это у тебя не файл а линейка и из нее нужно вырезать два сантиметра
← →
TUser © (2004-03-06 11:42) [9]В детстве была у меня в школе линейка, где несколько см было вырезано и склеено скотчем *)
← →
Anatoly Podgoretsky © (2004-03-06 11:47) [10]Вот это надо и сделать оставшийся кусок приклееить к старому.
← →
TUser © (2004-03-06 11:50) [11]Вспоминаю, забавная с ней была арифметика - типа 5+3=10. Жаль выбросил быстро.
← →
Алексей (2004-03-06 12:04) [12]Все, что связанно с копированием в дополнительный файл отпадает. Есть другой алгоритм вырезки. Делается все так, добавляется новое поле Record.Visible типа Boolean, и в зависимости от его значения ведется отображение записей. Далее после того как это поле стало Record.Visible:=False, в цикле перебераются все записи, и добавляются в конец файла с условием Record.Visible:=True, после чего они переносятся в начало файла а остаток просто обрезается. Но это это не устраивает. Надо что-то более рациональное.
← →
Anatoly Podgoretsky © (2004-03-06 12:11) [13]Тогда базы данных, индексы, признаки
← →
dmk © (2004-03-06 13:33) [14]Не удаляй запись, а помечай ее флагом "Пустая запись".
При перезаписи назначай соответствующий индекс и иногда
производи сортировку записей (переиндексацию).
← →
TUser © (2004-03-06 13:37) [15]Нет, БД луше - гемороя меньше.
← →
Алексей (2004-03-06 13:43) [16]>>>Не удаляй запись, а помечай ее флагом "Пустая запись".
>>>При перезаписи назначай соответствующий индекс и иногда
>>>производи сортировку записей (переиндексацию).
А по подробнее, как све ендо можно реализовать?????
← →
dmk © (2004-03-06 21:24) [17]Для этого рекомендую завести отдельную
таблицу в которой хранятся индексы и
смещения к записям. И эту таблицу например
можно дописывать каждый раз в конец файла или
в отдельный "файл-спутник". Например имя тоже,
а расширение другое. Все от ситуации зависит.
Без нормального проектирования можешь себе
головную боль заработать.
ps. Все это уже реализовано в базах данных.
Изучи какую-нибудь и используй на здоровье =)
← →
CyberStorm (2004-03-06 21:55) [18]Ну зачем же сразу индексы и смещения все гораздо проще - берется последняя запись и записывается на место удалаемой, затем файл обрезается на одну запись с конца - все быстро и не требует длительных операций. Все работает мгновенно при любых объемах информации.
← →
Mim (2004-03-07 00:08) [19]CyberStorm (06.03.04 21:55) [18]
Сработает, если записи в файле не упорядачены, иначе индексы и подобная штука и возвращаемся к БД :).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.057 c