Добавить строку прогресса в скрипт perl - PullRequest
0 голосов
/ 11 марта 2020

Еще новичок в perl и простые способы обойти это, поэтому я ищу помощь! Я уверен, что этот вопрос не очень сложен для решения, но я все еще застрял ...

Я хотел бы видеть прогресс этого фрагмента моего сценария:

my @goods = map {   my @vals = @{$ids_for{$_}};
                    my @matches = map { my $tf_id = $_;
                                        grep {$_ =~ $tf_id} @vals } @tf_ids;
                    my $num_match = scalar(@matches);
                    ## $num_match
                    for my $match ( @matches[0..($num_match-1)] ){
                        say {$out} "./" . $_ . ".fasta:" . $match if (scalar(@matches) > 0);
                    }

        } @keys;

## @goods

Входные данные скрипта представляют собой файл, содержащий идентификаторы, которые выглядят следующим образом:

>7_54 lcl
>7_264 lcl
>7_332 lcl
>7_427 lcl
>7_598 lcl
>7_772 lcl

Есть несколько тысяч из них, поэтому я хотел бы узнать о достигнутом прогрессе!

Спасибо за ваши ответы! Дайте мне знать, если вам нужна более важная информация, которую я мог бы забыть.

1 Ответ

1 голос
/ 12 марта 2020

Эти методы использовались для возрастов и не требуют каких-либо модулей или GUI, и, тем не менее, они прекрасно выполняли свои функции.

ПРИМЕЧАНИЕ: sleep добавлена ​​задержка для имитации рабочего процесса для визуального эффекта

use strict;
use warnings;
use feature 'say';

my @data = <DATA>;
chomp @data;        # snip eol
my $count = 0;
my $total = @data;

say "\nMethod #1";
for (@data) {
    $count++;
    say "[$count/$total] $_";
    sleep 1;
}

$| = 1;             # turn off output buffering

say "\nMethod #2";
$count = 0;
for (@data) {
    $count++;
    printf "[%d/%d] %s            \r",
            $count, $total, $_;
    sleep 1;
}

say "\nMethod #3";
$count = 0;
for (@data) {
    $count++;
    printf "[%.2f %%] %s            \r",
            100*$count/$total, $_;
    sleep 1;
}

say "\nMethod #4";
$count = 0;
for (@data) {
    $count++;
    my $percent = 100*$count/$total;
    printf "%-16s %6.2f %% %-51s 100%%\r",
            $_, $percent , '=' x int($percent/2) . '>';
    sleep 1;
}

say "\nBonus";
my @spinner = ('-','\\','|','/');
for (@data) {
    $count++;
    printf "[%d/%d] %6.2f%%  %s\r",
        $count, $total,
        100*$count/$total,
        $spinner[$count%4];
    sleep 1;
}

say "\nDone...";

__DATA__
>7_54 lcl
>7_264 lcl
>7_332 lcl
>7_427 lcl
>7_598 lcl
>7_772 lcl
>7_54 lcl
>7_264 lcl
>7_332 lcl
>7_427 lcl
>7_598 lcl
>7_772 lcl
>7_54 lcl
>7_264 lcl
>7_332 lcl
>7_427 lcl
>7_598 lcl
>7_772 lcl
>7_54 lcl
>7_264 lcl
>7_332 lcl
>7_427 lcl
>7_598 lcl
>7_772 lcl
...