Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

Удаление записи типа record.   Найти похожие ветки 

 
seferot ©   (2009-02-03 15:01) [0]

Здравствуйте!

Подскажите пожалуйста, как можно удалить запись типа record в не типизированном файле. О том как писать, читать и перезаписывать с этим нет проблем, но как удалять?


 
Anatoly Podgoretsky ©   (2009-02-03 15:14) [1]

> seferot  (03.02.2009 15:01:00)  [0]

А говоришь нет проблем.


 
Amoeba ©   (2009-02-03 15:43) [2]


> О том как писать, читать и перезаписывать с этим нет проблем,
>  но как удалять?

Только читая и перезаписывая. При этом возможны варианты.


 
Юрий Зотов ©   (2009-02-03 15:45) [3]

> seferot ©   (03.02.09 15:01)  

> как писать, читать и перезаписывать с этим нет проблем, но как удалять?

Чтобы что-то удалить из ЛЮБОГО файла, его как раз нужно перезаписать. А с этим, как Вы сказали, проблем нет.


 
Anatoly Podgoretsky ©   (2009-02-03 15:48) [4]

> Юрий Зотов  (03.02.2009 15:45:03)  [3]

Видимо нет, раз не удаляется.


 
MsGuns ©   (2009-02-03 16:18) [5]

>Юрий Зотов ©   (03.02.09 15:45) [3]
>Чтобы что-то удалить из ЛЮБОГО файла, его как раз нужно перезаписать.

Неужели ?


 
DVM ©   (2009-02-03 16:19) [6]


> seferot ©   (03.02.09 15:01)  

Введи в запись дополнительное поле "Удалена". При чтении записей из файла, пропускай те у которых пометка "Удалена". Можно еще в первую очередь писать новые записи на место удаленных. Правда, возможно, в этом случае файл будет занимать место несколько большее, чем в нем реально полезной информации, но это тоже не страшно - надо лишь в программе сделать функцию - упаковать базу.

Если все описанное выше сложно, то придется полностью перезаписывать файл.


 
clickmaker ©   (2009-02-03 16:39) [7]

> как можно удалить запись типа record в не типизированном
> файле

найти смещение записи в файле
поставить указатель файла на смещение + размер записи
прочитать файл до конца
вернуть указатель на смещение записи в файле
записать прочитанный кусок файла

это если непосредственно в файле, к тому же будет неэффективно при удалении нескольких записей.
Если же файл полностью засосан в память, да и записей нужно удалить несколько, то проще удалить в памяти и перезаписать


 
Юрий Зотов ©   (2009-02-03 17:09) [8]

> MsGuns ©   (03.02.09 16:18) [5]

Если Вам известен другой способ, был бы признателен за ликбез.


 
seferot ©   (2009-02-03 17:43) [9]


> найти смещение записи в файле
> поставить указатель файла на смещение + размер записи
> прочитать файл до конца
> вернуть указатель на смещение записи в файле
> записать прочитанный кусок файла

Есть ли примерчик?


 
Amoeba ©   (2009-02-03 18:04) [10]

Ознакомьтесь с этим
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=843
и затем, пользуясь справкой сможете сами написать такой примерчик. И пользы будет больше, чем использовать готовенькое.


 
MsGuns ©   (2009-02-04 09:59) [11]

>Юрий Зотов ©   (03.02.09 17:09) [8]
>Если Вам известен другой способ, был бы признателен за ликбез.

Мой вопрос был совершенно серьезным. Многие СУБД (не только скл-серверные) при внесении изменений в таблицы (или метаданные) не переписывают ВЕСЬ файл БД, а лишь его "куски". Право, странно было бы если бы сервер, удаляя запись из какой-нибудь таблицы (или вставляя), переписывал бы весь файл БД, размеры которого могут достигать теребайтов и который может находиться физически на разных дисках и даже ПК. Хотя, надо учесть, что в БД несколько необычная по сравнению с ФС система организации данных.


 
Юрий Зотов ©   (2009-02-04 12:21) [12]

> MsGuns ©   (04.02.09 09:59) [11]

>  надо учесть, что в БД несколько необычная по сравнению
> с ФС система организации данных.

Вот именно. В частности, удаляемая запись может и вовсе не удаляться, а только помечаться, как удаленная - и ее физическое удаление произойдет только при сжатии БД (backup и т.п.), что обнозначно сопрвождается все той же перезаписью файла. Причем, пометка эта может ставиться даже не в том файле, который хранит сами данные, а в совершенно другом, да каждый сервер может решать вопросы оптимизации по-своему - вплоть до работы с диском на физическом уровне.

Что же касается вставки и обновления записей, то к сабжу это не относится.

Продолжая Вашу логику, следовало бы начать с того, что файл - это всего лишь поименованная совокупность данных с определенной организацией и потому операцию удаления может и вовсе не поддерживать (например, с точки зрения программы, COM-порт - это тоже файл и работа с ним ведется через все те же файловые функции).

Но в данном случае речь идет о конференции "Начинающим" и самом обыкновенным дисковом файле. Поэтому в данном топике вряд ли уместно пускаться в пространные рассуждения о том, что есть файл вобще и как с ним можно работать вообще - поскольку это приведет лишь запудриванию мозгов человеку, который задал простой конкретный практический вопрос и хотел бы  получить на него простой конкретный практический ответ.

А уж всяческого рода загибания пальцев здесь и тем более неуместны. Причем, насколько помню, Вы и сами придерживаетесь этой же точки зрения - по крайней мере, на словах.


 
MsGuns ©   (2009-02-04 12:49) [13]

Юрий, ни о каком "загибании пальцев" и мысли не было.
Вы употребили слово "любой" и даже для усиления выделили его. Учитывая, что к Вашим постам здесь отношение особенное, я и задал вопрос.

ИМХО, Вы ответили правильно в отношении БОЛЬШИНСТВА файлов FAT-32, за обновление который "отвечает" сам винда. Однако в ОБЩЕМ случае Ваше УТВЕРЖДЕНИЕ неверно. И ссылаться на то, что новичку и не нужны "лишние" детали по-моему некорректно.


 
Юрий Зотов ©   (2009-02-04 13:03) [14]

> MsGuns ©   (04.02.09 12:49) [13]

Не будем спорить. Позволю себе лишь заметить, что было бы совсем неплохо, если бы текст поста [5] был не таким, коков он есть, а состоял из второго абзаца поста [13] (без последнего предложения) и, в качестве примера, текста поста [11] (без первого предложения).

Это позволило бы избежать ненужного...
:о)


 
Ega23 ©   (2009-02-04 13:15) [15]


> Однако в ОБЩЕМ случае Ваше УТВЕРЖДЕНИЕ неверно.


Что-то я не догоняю, каким образом оно может быть неверно.
Разве только в случае написания собственного менеджера по работе с файловой системой (да и то не факт). Что выглядит, мягко говоря, несколько  экстравагантным не только в рамках конференции "Начинающим", но даже и для "продвинутых"


 
Anatoly Podgoretsky ©   (2009-02-04 14:34) [16]

> Ega23  (04.02.2009 13:15:15)  [15]

Например файл может быть ReadOnly и быть последовательным.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.06 c
2-1233326934
максмакс
2009-01-30 17:48
2009.03.29
DoubleBuffered проблемы


2-1233870991
НосокСудьбы
2009-02-06 00:56
2009.03.29
Как правильно реализовать...


2-1233305201
mobwar
2009-01-30 11:46
2009.03.29
Замена двух, трёх символов на один


2-1233922041
КирилЛ
2009-02-06 15:07
2009.03.29
Как узнать "автономер" сохраняемой записи?


2-1233824251
AlexDan
2009-02-05 11:57
2009.03.29
Запрет расширения формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский