Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Perl File::tail

Ответить
Настройки темы
Perl File::tail

Пользователь


Сообщения: 69
Благодарности: 1

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt 1.txt
(26 байт, 7 просмотров)
Тип файла: txt file.txt
(2 байт, 4 просмотров)
Тип файла: txt print.pl.txt
(598 байт, 7 просмотров)
Здравствуйте! У меня возникла следующая ситуация!
У меня есть пустой файл "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 какие нибуть настройки.

Отправлено: 09:24, 30-03-2011

 
mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


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

PHP код: Выделить весь код

#!/usr/bin/perl

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

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

close testFile ); 

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

Отправлено: 10:36, 30-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 69
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:40, 30-03-2011 | #3

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:11, 30-03-2011 | #4


Аватара для dmitryst

Ветеран


Сообщения: 7265
Благодарности: 906

Профиль | Отправить PM | Цитировать


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

-------
Осваиваю FreeBSD


Отправлено: 13:54, 30-03-2011 | #5

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:07, 30-03-2011 | #6


Пользователь


Сообщения: 69
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 15:22, 30-03-2011 | #7

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:07, 31-03-2011 | #8

z01 z01 вне форума

Аватара для z01

Ветеран


Сообщения: 581
Благодарности: 32

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 00:18, 16-07-2011 | #9



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Perl File::tail

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - the file is possibly corrupt. the file header checksum does not match the computed ch MSergN Ноутбуки 4 18-04-2011 09:38
CMD/BAT - [решено] Аналог команды tail в Unix DimaDivine Скриптовые языки администрирования Windows 5 23-07-2009 01:57
FreeBSD 5.3 Perl не видит локали, а KDE при сборке не видит perl :o mar Общий по FreeBSD 8 06-05-2005 13:13
Perl Patrick Программирование и базы данных 3 02-06-2004 23:27




 
Переход