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缓冲会被强制清空 以上是自己摸索出的小方法,希望对大家有帮助,若有其他方法,请贴出来共享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |