![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Семён Розовых |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 22.11.2002 Репутация: нет Всего: нет |
Подскажите эффективный способ удаления строк из тхт файла.
Я пробывал примерно такое : 1) Считать файл в массив. 2) Создать цикл, перебирающий элементы массива 3) Каждый элемент записывается в файл, стирая при этом старые записи 4) Не записывается лишь в том случае, если элемент == тому который надо удалить. Но на мой взгляд это не эффективно. Подскажите пожалуйста более эффективный способ. |
|||
|
||||
NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: нет Всего: 11 |
можно так:
1) открывается файл на чтение/запись. 2) строки пропускаются до той строки, которую надо удалить. 3) считывается все, что после строки 4) указатель позиции устанавливается на начало удаляемой строки 5) записывается считанный конец файла 6) длина файла обрезается до текущей позиции -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
Powerhead |
|
|||
Unregistered |
Поместить строки в массив @str, в массив @del - строки, которые нужно удалить.
Теперь из массива @str исключены все совпадения с @del. Можешь писать его в файл.. Если известны номера строк, которые надо удалить, всё проще. На форуме была такая тема.. |
|||
|
||||
Guest |
|
|||
Unregistered |
а если файл размером раза этак в три больше всей доступной памяти, включая виртуальную?
![]() |
|||
|
||||
ixor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
Боюсь показаться непрофессиональным, но попробуйте взять готовое...:-)
В свое время мне ставили задачу редактирования текстовой БД на ~150 Mb в риалтайм (ну или почти) Сами понимаете, линейный поиск только, сколько времени займет... хорошим людям удалось найти профессиональную реализацию, (разработка одного из Американских Университетов)... Если не получится найти, единственное решение, о котором я слышал, создание индексированной текстовой БД... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |