Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление строк из файла, как? 
:(
    Опции темы
Семён Розовых
Дата 29.12.2002, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.11.2002

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



Подскажите эффективный способ удаления строк из тхт файла.

Я пробывал примерно такое :

1) Считать файл в массив.
2) Создать цикл, перебирающий элементы массива
3) Каждый элемент записывается в файл, стирая при этом старые записи
4) Не записывается лишь в том случае, если элемент == тому который надо удалить.

Но на мой взгляд это не эффективно. Подскажите пожалуйста более эффективный способ.
PM MAIL   Вверх
NightGoblin
Дата 1.1.2003, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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
PM MAIL WWW ICQ   Вверх
Powerhead
Дата 29.1.2003, 04:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Поместить строки в массив @str, в массив @del - строки, которые нужно удалить.

Код

$max = $#str
for ($x = 0; $x <= $max; $x++){
foreach (0..$#del){
if $str[$x] eq $del[$_]{
splice (@str, $x, 1); $max = $max - 1; last;
}
}
}


Теперь из массива @str исключены все совпадения с @del. Можешь писать его в файл..
Если известны номера строк, которые надо удалить, всё проще. На форуме была такая тема..
  Вверх
Guest
Дата 1.2.2003, 17:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а если файл размером раза этак в три больше всей доступной памяти, включая виртуальную? wink.gif
  Вверх
ixor
Дата 20.3.2003, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 19.3.2003
Где: Новосибирск

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



Боюсь показаться непрофессиональным, но попробуйте взять готовое...:-)
В свое время мне ставили задачу редактирования текстовой БД на ~150 Mb в риалтайм (ну или почти)
Сами понимаете, линейный поиск только, сколько времени займет... хорошим людям удалось найти профессиональную реализацию, (разработка одного из Американских Университетов)...
Если не получится найти, единственное решение, о котором я слышал, создание индексированной текстовой БД...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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