Показать полную графическую версию : Как оставить в файле Х первых строк?
Есть файлик с таким содержанием:
"
1
2
3
4
5
6
"
Надо, удалить все, кроме первых пяти строк. Как это сделать на perl?
Создать временный файл, скопировать туда первые пять строк, удалить старый файл и переименовать временный фал под именем старого.:)
Я пошел на irc и мне там посовевали способ получше
open(RE, "$counter_file");
@indata = <RE>;
close(RE);
open(SAV, ">$counter_file");
foreach $temp (@indata)
{
$counterzapis++;
if ($counterzapis<=5)
{
print SAV $temp;
}
}
vasketsov
14-10-2002, 16:34
Dan
Совет Guest-а более надежен, к тому же мне приходилось сталкиваться с разным пониманием префикса > (и не только его, кстати) в имени открываемого файла на разных версиях разных перлов для Windows, так что тестируй чтоб хвост не остался.
vasketsov
Это будет внутри скрипта, т.е туда никаких параметров внешних не проходит...
А что ненадежного, я не пойму? Вроде как раз все будет нормально. Объясните?
vasketsov
17-10-2002, 13:06
Dan
У тебя файл читается, потом открывается для записи и полностью очищается, и потом ты туда пишешь. А если дописать не успел?
Самый же безопасный и правильный вариант, да и самый простой, почему он сразу в голову не пришел только, это
1) открыть файл с префиксом +< (это открытие для чтения и записи, если файл есть, его содержимое сохраняется, если нет - он создается)
2) искать конец нужной строки.
3) установить конец файла в этом месте (возможно, придется обратить внимание на POSIX).
4) закрыть файл
Добавлено:
А про хвост - это я имел в виду, что в некоторых реализациях файл не очищается.
У тебя файл читается, потом открывается для записи и полностью очищается, и потом ты туда пишешь. А если дописать не успел?
Т.е. если сервак зависнет в этот момент?
vasketsov
17-10-2002, 16:45
Dan
или банальное веерное отключение электроэнергии BY CHUBAIS.
Но ведь вся IB написана так и ничего...
Вообще-то я сделал не так... У меня сначала (в foreach) все пишется в массив, а потом массив пишется в файл
Dan
Но ведь вся IB написана так и ничего... Очень даже чего [я этого не говорил (а то самому же править придётся :)), но при сеголняшней нагрузке случаются регулярные поглюкивания, ибо Мэтт даже флоком по человечески пользоваться не умеет.]
Я пока еще flock не трогал... т.е. в нем не разбирался :)
А что там такого, что Мэтт коряво сделал?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.