Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удалить строку, из файла 
V
    Опции темы
Rickert
Дата 28.6.2007, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



САБЖ.
Есть файл, который содержит большое кол-во строк. Как удалить одну из них? Не просто удалить, а чтобы остальные сдвинулись соответственно. То бишь, допустим файл такой:
Цитата
1
2
3
4
5
6
7

Удалять надо 4-ую строку. Должно быть так на выходе:
Цитата
1
2
3
5
6
7

Ваши варианты?

Добавлено через 12 минут и 56 секунд
Хочется добавить, что интересуют какие-либо более быстрые методы, кроме как создание нового файла с занесением в него всех строк, кроме той, которую надо удалить и последующим переименование файла.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MAKCim
Дата 28.6.2007, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Rickert, 
отобразить файл на память и работать как с обычным массивом
под *N?X: open() + mmap()
под Windows: OpenFile() + CreateFileMapping() + MapViewOfFile()

Это сообщение отредактировал(а) MAKCim - 28.6.2007, 09:15


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Rickert
Дата 28.6.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



MAKCim, не пойдёт, потому что речь идёт о базе данных, а следовательно размеры могут быть большими. Программа будет крутиться на сервере и должна работать максималоьно быстро.

Добавлено через 42 секунды
Там большое 15 текстовых полей на одну строку + номер строки.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MAKCim
Дата 28.6.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Rickert, 
это самый быстрый способ
эффективность работы с файлом обычным способом обратно пропорциональна количеству операций над ним
что касается объема памяти, в этом то и плюс отображения: в случае нехватки физической памяти система просто сбросит кэш на диск и тем самым освободит физические страницы
советую прикинуть:
либо мы делаем
Код

memmove(dest, src, 4096);

или
Код

read(file, temporary, 4096);
lseek(file, (int)(dest - src), SEEK_CUR);
write(file, temporary, 4096);


Добавлено @ 09:30
Код

# sed -i '4d' database.db

 smile 

Это сообщение отредактировал(а) MAKCim - 28.6.2007, 09:31


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Rickert
Дата 28.6.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Ладно, буду пробовать так.

Добавлено через 15 секунд
Может у кого ещё идеи родятся - отпишитесь, плз


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
JackYF
Дата 28.6.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Немного в другую сторону, но имхо, в данной ситуации быстрее будет завести 16-е поле в каждой строке - (активный/удаленный). Работать только с активными полями. А, допустим, когда наберется 1000 (ну или больше, смотря какой рабочий объем базы) удаленных записей, почистить файл от мусора.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
jonie
Дата 28.6.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата

MAKCim, не пойдёт, потому что речь идёт о базе данных, а следовательно размеры могут быть большими. Программа будет крутиться на сервере и должна работать максималоьно быстро.
а чем плохи собвтсенно "настоящие" БД ? Например Berkeley DB.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bsa
Дата 28.6.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(jonie @ 28.6.2007,  14:47)
Цитата

MAKCim, не пойдёт, потому что речь идёт о базе данных, а следовательно размеры могут быть большими. Программа будет крутиться на сервере и должна работать максималоьно быстро.
а чем плохи собвтсенно "настоящие" БД ? Например Berkeley DB.

Тем, что надо читать документацию и/или в обычном текстовом редакторе фигня будет. smile
PM   Вверх
JackYF
Дата 28.6.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(bsa @  28.6.2007,  19:57 Найти цитируемый пост)
обычном текстовом редакторе фигня будет. smile 


н-ну... насколько эффективной будет работа с такой базой данных (такого размера) в текстовом редакторе?..



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Rickert
Дата 29.6.2007, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Цитата(jonie @  28.6.2007,  14:47 Найти цитируемый пост)
а чем плохи собвтсенно "настоящие" БД ? Например Berkeley DB. 

Самый глупый вопрос который можно было задать. Ей богу.
Какая разница почему? Я задал вопрос с опред. условиями, а всё остальное - излишне.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
jonie
Дата 29.6.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



тогда фигли стонать что "это не достаточно быстро" ?
других ответов вам не дадут уже - все что было -- дали. Любое удаление "в середине" требует создание нового файла, с вырезанием содержимого. НЕТ других способов "вырезки".
Вам были приедложены варианты - альтернативы -- не нравится - не используйте. За сим тему пологаю закрытой.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Rickert
Дата 29.6.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Ишь какой крутой, темы закрывать smile 
Ладно, без шуток.
Просто не люблю, когда на вопрос отвечают вопросом. Ты спрашиваешь: как заточить лопату, хочу поле перекопать, а тебе говорят: а чем тебя трактор не устраивает? тоже самое smile

Добавлено через 1 минуту и 20 секунд
Мне вот интересно, а тот же Mysql работает через дамп в памяти?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MAKCim
Дата 29.6.2007, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(jonie @  29.6.2007,  08:22 Найти цитируемый пост)
Любое удаление "в середине" требует создание нового файла, с вырезанием содержимого. НЕТ других способов "вырезки".

ну почему же, есть
вопрос только в эффективности  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vinter
Дата 29.6.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(MAKCim @  29.6.2007,  10:24 Найти цитируемый пост)
ну почему же, есть

как? и есть ли уверенность что "то что может вырезать " не создает новый файл удаляя старый?


--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 29.6.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



MAKCim, просим smile


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.