Schrift
[thread]8020[/thread]

Ausgabe in Konsole immer an selber stelle

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
EagleFox
 2006-05-26 01:39
#66618 #66618
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

wie kann ich es realisieren, dass mir ein Zähler immer an der gleichen Stelle in der Konsole angezeigt wird, also ohne Zeilenumsprung?

Beispiel:

Code: (dl )
# Bearbeite Nummer: (hier soll z.B 1 bis 100 durchlaufen)


und nicht:

Code: (dl )
1
2
3
4
5
6
# Bearbeite Nummer: 1
# Bearbeite Nummer: 2
.
.
.
# Bearbeite Nummer: 100


Ich hoffe Ihr versteht was ich meine!?
pq
 2006-05-26 01:52
#66619 #66619
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das geht z.B. mit \r:
Code: (dl )
1
2
$| = 1;
for (0..42) { print "Bearbeite Nr. $_\r" }

oder: CPAN:Term::ProgressBar
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
EagleFox
 2006-05-26 02:13
#66620 #66620
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Hmm,

wenn ich den Code von Dir eingebe passiert bei mir rein garnichts.

Code: (dl )
1
2
3
4
5
6
7
8
#! /usr/bin/perl

use strict;
use warnings;

print "Test ";
$| = 1;
for (0..1000) { print "Bearbeite Nr. $_\r"}


..gibt nicht mal "Test" aus!
betterworld
 2006-05-26 02:52
#66621 #66621
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=EagleFox,26.05.2006, 00:13]Hmm,

wenn ich den Code von Dir eingebe passiert bei mir rein garnichts.

Code: (dl )
1
2
3
4
5
6
7
8
#! /usr/bin/perl

use strict;
use warnings;

print "Test ";
$| = 1;
for (0..1000) { print "Bearbeite Nr. $_\r"}


..gibt nicht mal "Test" aus![/quote]
Wahrscheinlich geht es einfach viel zu schnell, und da als letztes ein \r ausgegeben wird, ueberschreibt das naechste Shell-Prompt die Ausgabe.
Gib einfach nach der Schleife noch ein \n aus. Und fuege zwischen den Ausgaben in der Schleife noch ein sleep(1) hinzu.
EagleFox
 2006-05-26 10:25
#66622 #66622
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Ja, daran lag es! Es war zu schnell.
Ich hatte das \r noch nicht ganz verstanden, also es löscht offensichtlich die ganze Zeile nach der Ausgabe wieder.
Gibt es noch na andere Möglichkeit, so dass in der Zeile wirklich nur der Zähler neu geschrieben wird und nicht die Ganze Zeile?
So muss ich das ganze ja in ne if-Schleife packen, damit ich dann wenigstens den letzten Wert noch sehen kann.
renee
 2006-05-26 10:49
#66623 #66623
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zieh das \r doch einfach nach vorne:
Code: (dl )
print "\rBearbeite Nr. $_"
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
EagleFox
 2006-05-26 11:55
#66624 #66624
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Aber so habe ich ja garkeine Statusanzeige mehr, sondern nur noch die absolut letzte Ausgabe!
pq
 2006-05-26 13:52
#66625 #66625
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das kann doch wohl nicht so schwer sein!
Code: (dl )
1
2
3
4
5
6
$| = 1;
for (0..42) {
 print "Bearbeite Nr. $_\r";
 sleep 1;
}
print "\n";


wozu brauchst du da eine if-abfrage (es gibt keine if-schleifen, übrigens)?

und \r löscht auch nix. \r ist ein carriage return. es geht an den anfang der
zeile, wie bei der guten alten schreibmaschine. mehr nicht.\n\n

<!--EDIT|pq|1148637287-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
EagleFox
 2006-05-26 16:20
#66626 #66626
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
OK, um das Problem zu konkretisieren:

ich bearbeite eine Menge Daten mit einem Programm. Sagen wir mal eine for-Schleife (Ja, ich habe mich oben verschrieben, ich meinte natürlich eine FOR-Schleife) bearbeitet 10000 Daten und das ganze ca. 20000 mal. Dieser Vorgang dauert einige Zeit. Teilweise mehrere Stunden, wenn noch einige Fits gemacht werden müssen. Nun möchte ich einfach wissen, wie weit das Programm ist! Das geht mit obigem Code irgendwie nicht, weil der mir nur eine Ausgabe gibt, wenn das komplette Programm abgearbeitet ist!

Code: (dl )
1
2
3
4
for(my $i = 0; $i <= 20000; $i++){
 printf "Bearbeite Nr: $i\r";
}
print "\n";


klappt nicht, wo ist da mein Denkfehler???

P.S. @ pq
Danke, jetzt verstehe ich auch endlich das Symbol \r. Bin noch nicht lange dabei! ;-/

/modedit: Code-tag repariert\n\n

<!--EDIT|GwenDragon|1148646603-->
pq
 2006-05-26 16:33
#66627 #66627
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
du hast ja auch
$| = 1;
vergessen!
perlvar\n\n

<!--EDIT|pq|1148646881-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2006-05-26 01:39.