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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Perl File::tail (http://forum.oszone.net/showthread.php?t=203414)

Jonik-Mnimonik 30-03-2011 09:24 1647016

Perl File::tail
 
Вложений: 3
  • 1.txt (26 bytes, скачиваний: 16)
  • file.txt (2 bytes, скачиваний: 14)
  • print.pl.txt (598 bytes, скачиваний: 17)
Здравствуйте! У меня возникла следующая ситуация!
У меня есть пустой файл "file.txt", время от времени туда приходит некая информация. Мой скрипт "print.pl" подключается к этому файлу, читает его построчно, и выводит на экран содержимое. И вот тут возникает проблема, когда в файл "file.txt" приходит строка в которой не символа конца строки, то скрипт держит эту строку и не выплёвывает её.

Опишу некоторый тест который я проводил.
1. Создаю пустой файл file.txt и создаю файл 1.txt (я их прикрепил к сообщению).
2. Запускаю скрипт print.pl
3. В другой консоле делаю "cat 1.txt >> file.txt"
4. В результате на экране у меня высвечивается строки 1 и 2 (без строки 3), а в файле file.txt все 3 строки.
5. Далее опять делаю "cat 1.txt >> file.txt" и врезультате у меня третья строка от первого раза вылетает и показывается на экране.

Помогите плиз, может есть в функции fail::tail какие нибуть настройки.

mar 30-03-2011 10:36 1647074

а нельзя ли тоже самое, но гораздо проще?

PHP код:

#!/usr/bin/perl

open(testFile"file.txt") || die;

while (
$line = <testFile>)
{
  print 
$line ;        
}

close testFile ); 

При этом все три строки выводятся (хотя последняя, естественно, без признака конца строки

Jonik-Mnimonik 30-03-2011 11:40 1647122

Мне необходимо сделать в той структуре которую я указал.

mar 30-03-2011 13:11 1647184

да, я не подумала про tail. Но там как раз ожидается строка, т.е. полностью, с символом завершения (да и в логах, для которого это используется, признак конца строки всегда есть). так что не уверена, что в таком виде это решаемо

dmitryst 30-03-2011 13:54 1647213

а просто "tail -f имя_файла" не подходит?

mar 30-03-2011 15:07 1647260

кстати, да - обычный tail берет и последнюю строку из этого примера

Jonik-Mnimonik 30-03-2011 15:22 1647267

Я описал только небольшой пример, отображающий суть проблемы. на самом деле мне необходимо чтобы этот скрипт работал постоянно и делал действия если пришла строка, а если строки нет необходимо делать другие действия.
Я рассматривал различные варианты решения своей задачи, и этот способ оказался для меня наиболее приемлимый.
Может можно изменить сму функцию fail::tail? Там где держиться строка более 1 секунды принудительно вставлять \n и выталкивать строку. Только вот я никак не могу найти где это можно исправить.
Почему-то не могу загрузить сам файл вот ссылка:

http://cpansearch.perl.org/src/MGRAB...0.99.3/Tail.pm

mar 31-03-2011 15:07 1648083

Jonik-Mnimonik,
кстати, у Вас там третья строка появляется, когда приходит очередная партия. Можно раз в 1 с по крону добавлять в файл служебную строку (полноценную). Она будет "выталкивать" задержавшиеся строки, а саму ее легко будет игнорировать

z01 16-07-2011 00:18 1714312

Цитата:

Цитата mar
кстати, у Вас там третья строка появляется, когда приходит очередная партия. Можно раз в 1 с по крону добавлять в файл служебную строку (полноценную). Она будет "выталкивать" задержавшиеся строки, а саму ее легко будет игнорировать »

Костыль, а если строка будет дольше чем 1 секунда?

Проще задать максимальную строку, и если конец строки не встретился через N символов добавлять символ конца строки.


Время: 17:45.

Время: 17:45.
© OSzone.net 2001-