Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > чтение файла с указаной позиции


Автор: Strafer 21.4.2008, 22:45
Код

my $tmpsize = $db->prepare("SELECT oldsize FROM size");
$tmpsize->execute;
my $oldsize = $tmpsize->fetchrow_array;
print "Old size log file \b", $oldsize, "\n"; #добалено для проверки и отладки
my $nowsize = -s FTPD;
print "New size log file \b", $nowsize, "\n";# для тестирования
$nowsize = $db->do("UPDATE size SET oldsize=$nowsize");
    if ($nowsize > $oldsize)
    {
     seek(FTPD,$oldsize,0);
     print "дочитываю файл\n";
    }
    else
    {
     seek(FTPD,0,0);
     print "начал читать файл сначала\n";
    }
    my $ntpos = tell(FTPD);
    print "Это позиция на момент чтения лога: \b", $ntpos, "\n";
while(<FTPD>)#построчное чтение лога Pure-FTPd
{
    my $corentpos = tell(FTPD);
    print "Текущая позиция при чтении файла \b", $corentpos, "\n";

Результят вот такой
Код

Old size log file 88
New size log file177
начал читать файл сначала
Это позиция на момент чтения лога: 0
Текущая позиция при чтении файла 88
Текущая позиция при чтении файла 177

подскажите пожайлуста поему все время программа попадает на чтение с начала файла, неужели условие не выполняется
догадываюсь что значение получено из БД не integer но ведь на это не ругается
 Зато если начать читать сначала то
Код

Old size log file0
New size log file177
добавленый файл
Это позиция на момент чтения лога:0
Текущая позиция при чтении файла88
Текущая позиция при чтении файла177

Автор: amg 22.4.2008, 07:10
По моему, нужно внимательно посмотреть, что в переменной $oldsize. Почему напечаталось Old size log file 88, хотя, казалось бы, должно быть Old size log file88 (без последнего пробела)?

PS Strafer, какой смысл в строке типа "Old size log file \b". Разве "Old size log file" - не то же самое?

Автор: yura_nev 22.4.2008, 14:09
очевидно потому что $nowsize у вас равно rows-affected:
Код
$nowsize = $db->do("UPDATE size SET oldsize=$nowsize");


Автор: Strafer 23.4.2008, 23:37
yura_nev, спасибо за подсказку исправил теперь выглядит вот так 
Код

my $tmpsize = $db->prepare("SELECT oldsize FROM size");
$tmpsize->execute;
my $oldsize = $tmpsize->fetchrow_array;
print "Old size log file", $oldsize, "\n";
my $nowsize = -s FTPD;
print "New size log file", $nowsize, "\n";
    if ($nowsize > $oldsize)
    {
     seek(FTPD,$oldsize,0);
     print "Я попал на добавленый файл\n";
    }
    elsif ($nowsize == $oldsize)
    {
        print LOGF scalar(localtime), "\t", "File don't changet\n";
        exit 1;
    }
    else
    {
     seek(FTPD,0,0);
     print "Я начал читать файл сначала\n";
    }
    my $ntpos = tell(FTPD);
    print "Это позиция на момент чтения лога: \b", $ntpos, "\n";
$nowsize = $db->do("UPDATE size SET oldsize=$nowsize");
while(<FTPD>)#построчное чтение лога Pure-FTPd
{
    my $corentpos = tell(FTPD);
    print "Текущая позиция при чтении файла \b", $corentpos, "\n";

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)