NAME

Prty::Progress - Berechne Fortschrittsinformation

BASE CLASS

Prty::Hash

SYNOPSIS

Mit print:

    use Prty::Progress;
    
    $| = 1;
    my $n = 5;
    my $p = Prty::Progress->new($n);
    for my $i (1 .. $n) {
        sleep 1;
        print $p->msg($i,'i/n x% t/t(t) x/s t/1');
    }
    print $p->msg;

Mit R1::Log2:

    use R1::Log2;
    use Prty::Progress;
    
    my $log = R1::Log2->new(\*STDOUT);
    
    my $msg;
    my $n = 5;
    my $p = Prty::Progress->new($n);
    for my $i (1 .. $n) {
        sleep 1;
        $msg = sprintf '%s %s %s %s %s',$p->info($i);
        $log->printCr($msg);
    }
    $log->printLn($msg);

Ohne Gesamtanzahl der Schritte. Anmerkungen:

  • die Ausgabe der Prozentangabe wird unterdrückt

  • alle Ausgaben erfolgen ohne Bezug zu einer Gesamtanzahl (statt Ausgabe I/N nur I, statt ZEIT/GESAMTZEIT(RESTZEIT) nur ZEIT)

*

    use Prty::Progress;
    
    $| = 1;
    my $p = Prty::Progress->new;
    for my $i (1 .. 5) {
        print $pro->msg($i,'i/n x% t/t(t) x/h x/s t/1');
        sleep 1;
    }
    print $p->msg;
    1 0s 3600000/h 1000.00/s 0.00s/1\r
    2 1s 7200/h 2.00/s 0.50s/1\r
    3 2s 5400/h 1.50/s 0.67s/1\r
    4 3s 4788/h 1.33/s 0.75s/1\r
    5 4s 4500/h 1.25/s 0.80s/1\r
    5 5s 3600/h 1.00/s 1.00s/1\r

ATTRIBUTES

n

Gesamtzahl der Schritte

t0

Startzeitpunkt

i

Aktueller Schritt

duration

Vergangene Zeit in Sekunden (mit Nachkommastellen)

msg

Die letzte von msg() erzeugte Meldung.

METHODS

Konstruktor

new() - Konstruktor

Synopsis

    $pi = $class->new($n,@opt);

Arguments

$n

Gesamtzahl der Schritte

Options

-show => $bool (Default: 1)

Die Methode liefert Meldungen. Mit -show=>0 kann die Ausgabe von Meldungen verhindert werden. Beispiel:

    $pi = $class->new($n,-show=>$verbose);

Returns

Referenz auf Progress-Objekt

Schritt setzen

step() - Setze Progress-Objekt auf nächsten Schritt

Synopsis

    $pi->step($i);

Arguments

$i

Aktueller Schritt.

Fortschritts- und Performance-Information

count() - Liefere "I/N"

Synopsis

    $str = $pi->count;

Description

Liefere Stand in der Form "I/N". I ist die Anzahl der absolvierten Schritte, N ist die Anzahl der Gesamtschritte.

Liefere Stand in der Form "I", wenn die Anzahl der Gesamtschritte (N) nicht bekannt ist.

percent() - Liefere Verarbeitungsstand als Prozentsatz

Synopsis

    $str = $pi->percent;

Description

Liefere Verarbeitungsstand in Prozent in der Form "X". Ist die Gesamtanzahl der Schritte nicht bekannt, liefere einen Leersting.

time() - Liefere "HhMmSs/HhMmSs(HhMmSs)"

Synopsis

    $str = $pi->time;

Description

Liefere Zeitinformation in der Form "HhMmSs/HhMmSs(HhMmSs)". Der erste Teil ist die bislang verstrichene Zeit, der zweite Teil die geschätzte Gesamtzeit, der dritte Teil ist die geschätzte verbleibende Zeit.

Liefere die Zeitinformation in der Form "HhMmSs", wenn die Anzahl der Gesamtschritte (N) nicht bekannt ist.

performance() - Liefere Durchsatz

Synopsis

    $str = $pi->performance;
    $str = $pi->performance($prec);

Description

Liefere Durchsatz in der Form "X.XX" (Schritte pro Sekunde).

Arguments

$prec

Anzahl Nachkommastellen

timePerStep() - Liefere Zeit pro Schritt

Synopsis

    $str = $pi->timePerStep;
    $str = $pi->timePerStep($prec);

Description

Liefere Durchsatz in der Form "HhMmSs.x" (Zeit pro Schritt).

Arguments

$prec

Anzahl Nachkommastellen der Sekunde

Information mit einem Aufruf

info() - Liefere alle Fortschritts- und Performance-Information

Synopsis

    ($count,$percent,$time,$performance,$timePerStep) = $pi->info;
    ($count,$percent,$time,$performance,$timePerStep) = $pi->info($i);

Arguments

$i

Setze auf Schritt $i. Ist $i nicht angegeben, wird kein neuer Schritt gesetzt, sondern die Information zum aktuellen Schritt geliefert.

Returns

$count

Verarbeitungsstand in der Form "I/N". I ist die Anzahl der absolvierten Schritte, N ist die Anzahl der Gesamtschritte.

$percent

Verarbeitungsstand in Prozent.

$time

Zeitinformation in der Form "HhMmSs/HhMmSs". Der erste Teil ist die bislang verstrichene Zeit, der zweite Teil die geschätzte Gesamtzeit.

$performance

Durchsatz in der Form "X.XX" (Schritte pro Sekunde).

$timePerStep

Durchsatz in der Form "HhMmSs.x" (Zeit pro Schritt).

Meldung generieren

msg() - Erzeuge Fortschrittsmeldung

Synopsis

    $str = $pi->msg;
    $str = $pi->msg($fmt,@args);
    $str = $pi->msg($i,$fmt,@args);

Description

Erzeuge eine Fortschrittsmeldung und liefere diese zurück.

Die Methode ist für die eine einzeilige Ausgabe konzipiert, die sich kontnuierlich überschreibt, bis das Ende der Verarbeitung erreicht ist. Die letzte Meldung bleibt stehen.

  1. Die erste Form (ohne Parameter) liefert die beim letzten Aufruf produzierte Meldung - allerdings mit neu berechneten Durchschittswerten - noch einmal mit "\n" am Zeilenende.

  2. Die zweite Form erzeugt die Meldung für den aktuellen Schritt und beendet sie mit "\r".

  3. Die dritte Form bewirkt dasselbe wie 2), nur dass zuvor das Objekt auf Schritt $i gesetzt wird.

Ist bislang kein Schritt ausgeführt worden, liefert die Methode einen Leerstring ("").

Arguments

$i

Setze Objekt auf Schritt $i. Ist $i nicht angegeben, wird kein neuer Schritt gesetzt, sondern die Information des aktuellen Schritts in die Meldung eingesetzt.

$fmt

Formatelement für sprintf(), erweitert um folgende Platzhalter:

i/n

Wert von $pi->count.

x%

Wert von $pi->percent.

t/t(t)

Wert von $pi->time.

x/s

Wert von $pi->performance.

x/h

Wert von $pi->performance*3600.

t/1

Wert von $pi->timePerStep.

@args

Ausgabe-Zeichenketten oder Argumente für sprintf-Platzhalter.

Returns

$str

Erzeugte Meldung

warn() - Erzeuge Warnung

Synopsis

    $str = $pi->warn(@args);
    $str = $pi->warn($fmt,@args);

Arguments

$fmt

Formatelement für sprintf().

@args

Ausgabe-Zeichenketten oder Argumente für sprintf-Platzhalter.

Returns

$str

Erzeugte Meldung

Example

Schreibe Warnung nach STDERR, die oberhalb der Fortschrittsanzeige erscheint:

    warn $pro->warn("WARNING: Pfad erfüllt Regex nicht: $file");

VERSION

1.116

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2017 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.