Есть файлик с таким содержанием:
" 1 2 3 4 5 6 " Надо, удалить все, кроме первых пяти строк. Как это сделать на perl? |
Создать временный файл, скопировать туда первые пять строк, удалить старый файл и переименовать временный фал под именем старого.:)
|
Я пошел на irc и мне там посовевали способ получше
Код:
open(RE, "$counter_file"); |
Dan
Совет Guest-а более надежен, к тому же мне приходилось сталкиваться с разным пониманием префикса > (и не только его, кстати) в имени открываемого файла на разных версиях разных перлов для Windows, так что тестируй чтоб хвост не остался. |
vasketsov
Это будет внутри скрипта, т.е туда никаких параметров внешних не проходит... А что ненадежного, я не пойму? Вроде как раз все будет нормально. Объясните? |
Dan
У тебя файл читается, потом открывается для записи и полностью очищается, и потом ты туда пишешь. А если дописать не успел? Самый же безопасный и правильный вариант, да и самый простой, почему он сразу в голову не пришел только, это 1) открыть файл с префиксом +< (это открытие для чтения и записи, если файл есть, его содержимое сохраняется, если нет - он создается) 2) искать конец нужной строки. 3) установить конец файла в этом месте (возможно, придется обратить внимание на POSIX). 4) закрыть файл Добавлено: А про хвост - это я имел в виду, что в некоторых реализациях файл не очищается. |
Цитата:
|
Dan
или банальное веерное отключение электроэнергии BY CHUBAIS. |
Но ведь вся IB написана так и ничего...
Вообще-то я сделал не так... У меня сначала (в foreach) все пишется в массив, а потом массив пишется в файл |
Dan
Цитата:
|
Я пока еще flock не трогал... т.е. в нем не разбирался :)
А что там такого, что Мэтт коряво сделал? |
Время: 10:13. |
Время: 10:13.
© OSzone.net 2001-