![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Rickert |
|
||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
САБЖ.
Есть файл, который содержит большое кол-во строк. Как удалить одну из них? Не просто удалить, а чтобы остальные сдвинулись соответственно. То бишь, допустим файл такой:
Удалять надо 4-ую строку. Должно быть так на выходе:
Ваши варианты? Добавлено через 12 минут и 56 секунд Хочется добавить, что интересуют какие-либо более быстрые методы, кроме как создание нового файла с занесением в него всех строк, кроме той, которую надо удалить и последующим переименование файла. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Rickert,
отобразить файл на память и работать как с обычным массивом под *N?X: open() + mmap() под Windows: OpenFile() + CreateFileMapping() + MapViewOfFile() Это сообщение отредактировал(а) MAKCim - 28.6.2007, 09:15 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
MAKCim, не пойдёт, потому что речь идёт о базе данных, а следовательно размеры могут быть большими. Программа будет крутиться на сервере и должна работать максималоьно быстро.
Добавлено через 42 секунды Там большое 15 текстовых полей на одну строку + номер строки. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Rickert,
это самый быстрый способ эффективность работы с файлом обычным способом обратно пропорциональна количеству операций над ним что касается объема памяти, в этом то и плюс отображения: в случае нехватки физической памяти система просто сбросит кэш на диск и тем самым освободит физические страницы советую прикинуть: либо мы делаем
или
Добавлено @ 09:30
Это сообщение отредактировал(а) MAKCim - 28.6.2007, 09:31 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Ладно, буду пробовать так.
Добавлено через 15 секунд Может у кого ещё идеи родятся - отпишитесь, плз -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Немного в другую сторону, но имхо, в данной ситуации быстрее будет завести 16-е поле в каждой строке - (активный/удаленный). Работать только с активными полями. А, допустим, когда наберется 1000 (ну или больше, смотря какой рабочий объем базы) удаленных записей, почистить файл от мусора.
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Тем, что надо читать документацию и/или в обычном текстовом редакторе фигня будет. |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
н-ну... насколько эффективной будет работа с такой базой данных (такого размера) в текстовом редакторе?.. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Самый глупый вопрос который можно было задать. Ей богу. Какая разница почему? Я задал вопрос с опред. условиями, а всё остальное - излишне. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
тогда фигли стонать что "это не достаточно быстро" ?
других ответов вам не дадут уже - все что было -- дали. Любое удаление "в середине" требует создание нового файла, с вырезанием содержимого. НЕТ других способов "вырезки". Вам были приедложены варианты - альтернативы -- не нравится - не используйте. За сим тему пологаю закрытой. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Ишь какой крутой, темы закрывать
Ладно, без шуток. Просто не люблю, когда на вопрос отвечают вопросом. Ты спрашиваешь: как заточить лопату, хочу поле перекопать, а тебе говорят: а чем тебя трактор не устраивает? тоже самое Добавлено через 1 минуту и 20 секунд Мне вот интересно, а тот же Mysql работает через дамп в памяти? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
ну почему же, есть вопрос только в эффективности -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
как? и есть ли уверенность что "то что может вырезать " не создает новый файл удаляя старый? |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
MAKCim, просим
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Во-первых, там принцип совершенно иной. Думаю, там записи помечаются "удаленными" при удалении, а добавляемые заполняют их место. Но, если честно, я этим сильно не интересовался, поэтому там могут быть другие методы. Во-вторых, отображение в память это очень удобный способ работы с файлами, поэтому скорее всего, он там используется. Но никто не мешает тебе самому это узнать - исходники mysql доступны.
Способ №1:
Способ №2:
|
||||||||
|
|||||||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
для простоты возьмем файл такой структуры: есть строки текста одинаковой длины (допустим length), которые разделены символом Ah
нужно в файле вырезать строку с номером number
файл PATH для примера такой
Добавлено @ 10:49 bsa, гы, как код похож (я у тебя не смотрел, честное слово да кстати, у тебя размер файла остается прежним Это сообщение отредактировал(а) MAKCim - 29.6.2007, 10:51 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| jonie |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
---- сложно чтоли ответить было "специфика задачи подразумевает использование только текстового файла" ? и не былоб споров -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||
|
|||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
как раз суть разная мы до вырезки не пишем -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
MAKCim,
bsa, прикольно конечно ,но я почему то думал, что вы имели ввиду чистое вырезание со сдвигом без перезаписи ни одной из частей файла, а так то понятно. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
vinter,
это невозможно по крайней мере если вырезаемый кусок не кратен размеру сектора -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Нет. Условие более жесткое - если не кратен размеру кластера! |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
у нас какая ФС, FATx чтоли? современные ФС для файла создают связный список используемых секторов, поэтому в случае если вырезаемый кусок занимает n-ое количество секторов с кратным размеру сектора базовым адресом, его возможно вырезать без записи (несколько операций над списком) Это сообщение отредактировал(а) MAKCim - 29.6.2007, 20:51 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
вот поэтому я был сильно удивлен
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Всем спасибо
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Странно. А что тогда у NTFS за размер перед форматированием (в т.ч. и быстрым) задается в менеджере дисков? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
честно говоря не знаю -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
А я скажу: "Размер кластера" от 512 байт до 64К.
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
bsa,
все, понял ты прав но суть работы со связными списками не меняется -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
А я не отрицал. Я просто заменил слово "сектор" на слово "кластер". И не более того. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |