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


Автор: necromantiq 7.3.2011, 15:15
срочно нужно написать прогу, на перле, язык для меня новый, времени  нету, одна из задач, анимированый ввод, в консоли, прога консольная,
пишу в убунту и вынь 7. куда копать? сам язык изучаю, но на тонкости тупо нету времени

Автор: necromantiq 7.3.2011, 20:27
ну где же вы, гуру кодинга ))

Автор: gcc 8.3.2011, 22:34
perl умеет буферизировать и не буферизировать

Код

#!/usr/bin/perl -w
$| = 1; #no buf

use strict;
countdown(3);
sub countdown
   {
    for (my $i=$_[0];$i>0;$i--)
       {
        print "$i\r"; # \r
        sleep(1);
       }
   }


обсуждали http://forum.lissyara.su/viewtopic.php?f=17&t=22237&hilit=perl

Автор: necromantiq 9.3.2011, 02:28
спасибо, а можно поподробнее об

 $| = 1; #no buf

гугл не помогает )

Автор: necromantiq 9.3.2011, 02:57
задача примерно такая (помогли с кодом)

 #!/usr/bin/env perl

use Time::HiRes qw(usleep);

$|=1;

for ( $i = 0; $i < 10; $i++ ) {
   for( $j  = 0; $j < $i; $j++ ) {
   print "$j";
   }
 print "\r";
usleep( 100000 );
}

сейчас строка увеличивается как

a
aa
aaa

в консоле выглядит как ааа......

никак не получается сделать так чтоб а "бежало"

а
 а
  а

..а.... >>

понимаю что надо пробелами затирать, но не получается, логика не привычная + эта буферизация, которая хз как работает.
что еще децл затрудняет поиски, то что в иде по одному показывается вывод, в консоли по другому...

Автор: ming 14.3.2011, 18:29
Код

$|=1;
my $str = "string";
for(my $i=0; $i<10; $i++) {
    print "\r"; # переместить курсор на начало строки
    print " "x$i; # напечатать пробел i раз (с каждым шагом всё больше и больше пробелов)
    print $str; # напечатать саму строку
    sleep 1;
}

Автор: dixoNICH 10.4.2011, 09:31
вместо sleep(1) лучше использовать select
ввиде :
Код

select undef,undef,undef, 0.1

например так. 0.1 - это одна десятая.
минус sleep, что он принимает в аргументы только секунды.

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