Schrift
[thread]8452[/thread]

Wagenrücklauf mit \r ?



<< >> 10 Einträge, 1 Seite
HuberDe
 2006-10-26 17:00
#71191 #71191
User since
2006-10-26
15 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bin es von C und Linux gewohnt, mit \r innerhalb einer print anweisung einen Wagenrücklauf zu realisieren. Das funktioniert jedoch nicht. Bei \r bekomme ich einen Umbruch.

Ich habe vor eine Zeile auf die Kommandozeile zu schreiben und die gleiche Zeile mit einer weiteren print anweisung wieder zu schreiben. Also quasi den Cursor wieder an den Beginn der Zeile zu setzen und dort weiter zu schreiben.

Weiß jemand wie das geht?

Gruß, Denis
renee
 2006-10-26 17:08
#71192 #71192
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welches OS?

Eigentlich sollte es so funktionieren (außer Du sitzt an einem Mac)...

Was willst Du machen? Eine Progressbar? Dann würde es sich nämlich anbieten, CPAN:Term::Progressbar zu benutzen...
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/
HuberDe
 2006-10-26 17:37
#71193 #71193
User since
2006-10-26
15 Artikel
BenutzerIn
[default_avatar]
Mücrosaft Windoof XP

Der Tip mit der ProgressBar ist gut. Mich würde trotzdem interessieren, warum der Wagenrücklauf nicht funktioniert. Normal sollte das doch gehen?

Denis
Relais
 2006-10-26 18:38
#71194 #71194
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was spricht denn gegen \n ?
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
HuberDe
 2006-10-26 18:50
#71195 #71195
User since
2006-10-26
15 Artikel
BenutzerIn
[default_avatar]
\n setzt mich in die nächste Zeile und das möcht ich nicht. Ich möchte in der gleichen Zeile wieder schreiben. Also quasi die alte Zeile überschreiben.
esskar
 2006-10-26 18:51
#71196 #71196
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
funzt bei mir prima
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

$|++;

for (0 .. 9) {
my $line = $_ x 10;
print "$line\r";
sleep(1);
}
HuberDe
 2006-10-26 19:05
#71197 #71197
User since
2006-10-26
15 Artikel
BenutzerIn
[default_avatar]
Oha, ja bei mir in der Konsole auch! Ich habs bisher nur im Output vom Kommodo angeschaut. Und da funktioniert es nicht!??? Jetzt hab ich jedoch wieder das Problem, dass er mir die Zeile nicht abdruckt, da ich keine Variable und kein \n drin hab. Ich drucke quasi nur "please wait\r", "please wait .\r", .... Am Bildschirm erscheint jedoch nichts, wenn ich kein \n hinten ran häng
renee
 2006-10-26 19:21
#71198 #71198
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hast Du auch das $|++; geschrieben?
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/
sid burn
 2006-10-26 23:26
#71199 #71199
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Die Bufferung der stdio ist noch aktiv. Das solltest du eigentlich auch von C kennen das du den Buffer flushen musst.

Entweder machst du es so wie renne sagte und $| auf einen wahren Wert setzen. Damit wird die Pufferung des aktuellen Dateihandles deaktiviert. (Defaultmäßig ist das STDOUT, du kannst aber mit select() auch ein anderen Handle auswählen)

Oder du benutzt 2 andere Möglichkeiten die ich persönlich wegen der klareren Syntax besser finde.

Zum einen kannst du auch syswrite() benutzen das umgeht sofort die Pufferung, und schreibt sofort etwas.

Oder du kannst auch das Modul IO::Handle einbinden, und den Buffer des Dateihandles "STDOUT" z.B. mit "STDOUT->flush" leeren, nachdem du etwas mit print() geschrieben hast.

Sofern du nach STDOUT geschrieben hast. Ansonsten kannst du auch jeden anderen Handle dort angeben, also niht nur STDOUT.\n\n

<!--EDIT|sid burn|1161891102-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
HuberDe
 2006-10-27 10:15
#71200 #71200
User since
2006-10-26
15 Artikel
BenutzerIn
[default_avatar]
Ich kenn das von C, wusste jedoch nicht, wie man es ausser mit \n umgehen kann. Ich danke euch allen für die schnellen und zahlreichen Antworten.

Denis
<< >> 10 Einträge, 1 Seite



View all threads created 2006-10-26 17:00.