PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bereits ausgegebenes nochmal bearbeiten



luxer
25-09-2007, 20:57
hy leute,

cih schreibe gerade an einem kleinen script in dem ich ziemlich viele berechnungen (50-200000) durchführen muss.

ich hab mir nen kleinen "Ladebalken" gebaut, das ganze sieht ungefähr so aus:


$i++;
$b=$i/($GesamteAnzahlAnBerechnung/68(zeilenbreite in zeichen));

if (($b-$last)>=1) {print "x";$t.="x";}
if ($b>=($last+1)){$last=$b;}


nun wollte ich dadrüber noch ne "verbleibende sekunden" anzeige basteln.

ich hab mir das so gedacht:
Ich nehme die Zeit am Anfang der ersten Rechnung und am Ende der Berechnung nach der 10%(x%) um sind.
diese mal 10-(x%/10) und geb sie aus das is also die zeit die noch übrig is
das ganze dann weiter mit 20%,30%,... und geb sie immer schön aus.

Nun meine Frage:
die Verbleibende Zeit soll mittig über dem Ladebalken angezeit werden
geht das ?
wenn ja wie?
versteht mich nich falsch, ich will die alte zeit natürlich weg haben und dafür die neue setzten.

jan61
26-09-2007, 17:53
Moin,

ich nehme an, dass das Perl ist? Wenn ja, dann wirst Du wohl zu einem Modul greifen müssen, was curses unterstützt. Erste Anlaufstelle für solche Probleme ist http://cpan.org: http://search.cpan.org/search?query=curses&mode=all

Jan

Molaf
26-09-2007, 20:04
Hallo,

Term::ProgressBar gehört sogar zur Standardinstallation.

Ansonsten kommt man ja mit "\r" immer wieder an den Anfang der Zeile zurück und könnte sie dann einfach wieder neu überschreiben.
Also den Text über dem Balken in eine Variable schreiben ($text zum Beispiel), dann den Balken komplett bauen:
$balken = '#' x $laenge . '_' x (68 - $laenge);

Nun den Text einfügen:
substr($balken, ( (68/2)-int(length($text/2) ), length($text) ) = $text;
und
print $balken."\r";

Ist ein wenig schmutziges Gebastel und wird vermutlich sogar funktionieren, zumindest wenn niemand eine Shell mit anderer Breite hat (aktuelle Breite kann Term liefern). Ausserdem gibt es an der Windows-Shell immer wieder Probleme solange noch kein Newline kam, u.U. wird dann solange noch nichts gezeigt, der Fortschrittsbalken also bis 100% erstmal garnicht.

Gruß
Molaf