Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Как оставить в файле Х первых строк? (http://forum.oszone.net/showthread.php?t=31944)

Dan 12-10-2002 19:24 217724

Есть файлик с таким содержанием:
"
1
2
3
4
5
6
"
Надо, удалить все, кроме первых пяти строк. Как это сделать на perl?

Guest 14-10-2002 07:37 217725

Создать временный файл, скопировать туда первые пять строк, удалить старый файл и переименовать временный фал под именем старого.:)

Dan 14-10-2002 16:14 217726

Я пошел на 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 217727

Dan
Совет Guest-а более надежен, к тому же мне приходилось сталкиваться с разным пониманием префикса > (и не только его, кстати) в имени открываемого файла на разных версиях разных перлов для Windows, так что тестируй чтоб хвост не остался.

Dan 14-10-2002 18:02 217728

vasketsov
Это будет внутри скрипта, т.е туда никаких параметров внешних не проходит...
А что ненадежного, я не пойму? Вроде как раз все будет нормально. Объясните?

vasketsov 17-10-2002 13:06 217729

Dan
У тебя файл читается, потом открывается для записи и полностью очищается, и потом ты туда пишешь. А если дописать не успел?

Самый же безопасный и правильный вариант, да и самый простой, почему он сразу в голову не пришел только, это
1) открыть файл с префиксом +< (это открытие для чтения и записи, если файл есть, его содержимое сохраняется, если нет - он создается)
2) искать конец нужной строки.
3) установить конец файла в этом месте (возможно, придется обратить внимание на POSIX).
4) закрыть файл

Добавлено:

А про хвост - это я имел в виду, что в некоторых реализациях файл не очищается.

Dan 17-10-2002 15:05 217730

Цитата:

У тебя файл читается, потом открывается для записи и полностью очищается, и потом ты туда пишешь. А если дописать не успел?
Т.е. если сервак зависнет в этот момент?

vasketsov 17-10-2002 16:45 217731

Dan
или банальное веерное отключение электроэнергии BY CHUBAIS.

Dan 18-10-2002 14:01 217732

Но ведь вся IB написана так и ничего...

Вообще-то я сделал не так... У меня сначала (в foreach) все пишется в массив, а потом массив пишется в файл

ivank 18-10-2002 22:07 217733

Dan
Цитата:

Но ведь вся IB написана так и ничего...
Очень даже чего [я этого не говорил (а то самому же править придётся :)), но при сеголняшней нагрузке случаются регулярные поглюкивания, ибо Мэтт даже флоком по человечески пользоваться не умеет.]

Dan 19-10-2002 00:41 217734

Я пока еще flock не трогал... т.е. в нем не разбирался :)
А что там такого, что Мэтт коряво сделал?


Время: 10:13.

Время: 10:13.
© OSzone.net 2001-