加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中显示滚动进度条

发布时间:2020-12-15 23:58:01 所属栏目:大数据 来源:网络整理
导读:非常怀念DOS时代在程序中显示进度的方法,当时觉得那些程序非常酷(记得是JAR,一个压缩程序,进度在原地显示,有百分比),因为倾我所学,也不知道如何实现。在PERL代码中,我一直使用的就是滚屏显示进度。今天看有人跟老大吵架的贴,找到了灵感,贴出来跟
非常怀念DOS时代在程序中显示进度的方法,当时觉得那些程序非常酷(记得是JAR,一个压缩程序,进度在原地显示,有百分比),因为倾我所学,也不知道如何实现。在PERL代码中,我一直使用的就是滚屏显示进度。今天看有人跟老大吵架的贴,找到了灵感,贴出来跟大家共享一下。

1、方法1
my?$max?=?100;
for(1..$max)?{
????????my?$percent?=?$_/$max*100;
????????print?"$_?-?$percent?%?OK!n";
????????sleep(1);
}
<STDIN>;
复制代码
这是我最常用的方法,在处理大量数据时,我从屏幕上能看到进度,虽然它会消耗一些额外的时间。这种方法简单,稳定,而且容易实现,随意使用。

2、方法2
#!/usr/bin/perl?-w

$|?=?1;
my?$max?=?10;
for(1..$max)?{
????????print?".";
????print?"?Complete!"?if?($_?==?$max);
????????sleep(1);
}
<STDIN>;
复制代码
这也是DOS时代非常经典的进度指示,从“…..”的长度来判断进度。

3、方法3
#!/usr/bin/perl?-w

local?$|?=?1;
my?@progress_symbol?=?('-','','|','/');
my?$n?=?0;
for(my?$i=1;$i<=3000;$i++){
????????print?"r?$progress_symbol[$n]?$i";
?????????$n?=?($n>=3)??0:$n+1;
????????select(undef,?undef,?0.1);
}
local?$|?=?0;

<STDIN>;
复制代码
用滚轮在原地显示进度,当然也可以加入百分比,这是我一直认为非常酷的方法,以后会加入自己的程序。

4、方法4
#!/usr/bin/perl?-w

local?$|?=?1;
while?(1){
????????&gettime;
????????print?"r?$now";
????????sleep(1);
}
local?$|?=?0;
exit;

sub?gettime?{
????????my?($sec,$min,$hour,$day,$mon,$year,$weekday,$yeardate,$savinglightday)?=?(localtime(time));
????????$sec?=?($sec?<?10)??"0$sec":$sec;
????????$min?=?($min?<?10)??"0$min":$min;
????????$hour?=?($hour?<?10)??"0$hour":$hour;
????????$day?=?($day?<?10)??"0$day":$day;
????????$mon?=?($mon?<?9)??"0".($mon+1):($mon+1);
????????$year?+=?1900;
????????$now?=?"$year.$mon.$day?$hour:$min:$sec";
}
复制代码
在原地显示走时的数字时钟,可以加入百分比,也很酷。

5、方法5
#!/usr/bin/perl?-w
#?Author:?Zhao
#?Date:?2009.12.22
#?Purpose:?simulate?the?progress?bar

$n?=?30;
for($i=1;$i<=$n;$i++){
????????proc_bar($i,$n);
????????select(undef,?0.2);
}
<STDIN>;

sub?proc_bar{
????????local?$|?=?1;
????????my?$i?=?$_[0]?||?return?0;
????????my?$n?=?$_[1]?||?return?0;
????????print???"r?[?".("32"?x?int(($i/$n)*50)).("?"?x?(50?-?int(($i/$n)*50)))."?]?";
????????printf("%2.1f?%%",$i/$n*100);
????????local?$|?=?0;
}
复制代码
从吵架贴里看到的,在我看来比较高级的方法,有百分比,有不断增长的进度条。

另有一个叫Term:rogressBar,也很好,但我的程序没有那么复杂,有兴趣的可以研究一下。CPAN上还有一些其他显示进度的模块。

$|变量的作用:
$|变量设置为真时,每输出一次,STDOUT缓冲会被强制清空


以上是自己摸索出的小方法,希望对大家有帮助,若有其他方法,请贴出来共享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读