![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| C.Smoke |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.1.2005 Где: Сертолово(СПб) Репутация: нет Всего: нет |
Доброго времени суток!
Проблема в следующем: Есть фаил "ITEMS.txt" в нём записаны данные вида: "#001::100::90::text #002::65::75::text2 ... и т.д." как на Perl заменить одну строку на другую. например : "#002::65::75::text2" на "#002::64::75::text2" без её смещения в тексте. возможно ли такое. и если есть в Perl функция которая очищает фаил перед открытием немогли бы вы про неё рассказать. Зарание Спасибо! |
|||
|
||||
| dimes |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.7.2004 Где: то около СПБ Репутация: нет Всего: 14 |
Есть такая функция! Замечательная функция! И в любой документации нормально описаная. Открывает файл для записи если нет файла, создаст, если есть очистит open(FIL,">file.txt"); Открывает файл для четения и записи если нет файла, создаст, если есть очистит open(FIL,"+>file.txt");
А никак, понятие строки ввели люди для удобства а в файле нет никаких строк, но можно проблемму решить так: 1. Загрузить файл в память, там его отредактировать а потом сохранить + очень просто - может памяти не хватить - следит чтобы другие процессы не могли править этот файл, но это легко решается. 2. В процессе прочтения файла создавать копию исходного файла с отредактироваными строками а потом копией заменить оригенал. + Нужно мало памяти + Строки легко удаляются + Файл занимает ровно столько сколько он содержит инфы + некая служебная инфа - Нужно больше памяти на винте (ерунда конечно но всетаки...) - много не нужный действий, если в файле 1000 строк а нужно отредактировать 10 то оставшиеся 990 строк всеравно придется копировать. - Немного труднее лочить файл для других процессов 3. Создать файл с фиксированными размером поля, т.е. всегда считать что строка не может быть больше или меньше указанного размера. Если меньше то добивать до указанного размера, если больше то усекать. + меньше операции, по сравнению с 2 + проще лочить файл + нужно не много памяти - задача не тривеальная, не для новичка - нужно больше места не винте для файла - теряется инфа в строке каторая не влезла в строку - если меняется размер строки, нужно будет пересоздать файл - появление дыр в файле из-за удаления строк Это сообщение отредактировал(а) dimes - 12.2.2005, 12:56 |
||||
|
|||||
| C.Smoke |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.1.2005 Где: Сертолово(СПб) Репутация: нет Всего: нет |
А сколько выделяется памяти? у меня в файле 300-500 строк по ~30 символов. (9000-15000символов в файле) хватит ли памяти на такой фаил!? подойдёт ли такой код:
насколько медленный этот способ? Заранее спасибо |
||||
|
|||||
| dimes |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.7.2004 Где: то около СПБ Репутация: нет Всего: 14 |
Не знаю. 15 немного но если завтра станет 1.5М? Или если он(скрипт) дергается 20 раз в сек? Или ты уже загрузил 2М. Самое точное нам скажет опыт
Конструкиция бессмысленна, потому что
Т.е. ты гарантированно читаеш пустой файл.
Так как ты читаеш пустой файл то это не будет ошибки, но если ты хочеш работать с уже наполенным файлом, то забыл 2 комманды.
Так же пропущенна команда flock, как ты будеш отслеживать одновременный доступ к файлу от разных клиентов? |
||||||||||
|
|||||||||||
| C.Smoke |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.1.2005 Где: Сертолово(СПб) Репутация: нет Всего: нет |
Огромное спасибо!
Всё работает! |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |