Portál AbcLinuxu, 23. dubna 2024 21:40


Dotaz: carriage return

11.11.2005 21:04 Jiri Tomasek
carriage return
Přečteno: 120×
Odpovědět | Admin
Zdravim, mam takovy zvlastni problem - co presne dela carriage return \r?

Vzdycky jsem si myslel, ze pokud je nekde uvnitr textu tento znak, pozice se posune na zacatek aktualniho radku a pote se prepisuje jeho stavajici obsah. Tedy tohle:

text: abcdef\rghi
vysledek: rghief

Ale ted jsem tento znak potreboval v perl programu. Potrebuji vypsat nejaky radek, za 10 sekund ho prepsat necim jinym atd. \r zpusobuje, ze se mi nevypisuje vubec nic. Jakmile ho odstranim, tak je to OK, az na to, ze se radky neprepisuji...

Tzn. abych to shrnul:
Co znamena \r?
Jak lze v perlovem programu stale prepisovat tentyz radek (a uvital bych i to, kdyby z toho puvodniho nic nezbylo, ani kdyby byl delsi nez ten, ktery ho prepisuje - tj. napr. ho jeste predtim vymazat)?

Uprimne diky...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.11.2005 21:12 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: carriage return
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně to funguje

[ivok@zero ~]$ perl -e 'print "abcd\r123\rAB\n"' AB3d
11.11.2005 21:14 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: carriage return
pardon
[ivok@zero ~]$ perl -e 'print "abcd\r123\rAB\n"'
AB3d
A dělá to to, že nejdřív vytiskne "abcd", pak přes to "123" a pak přes to "AB"...

Jestli vám něco nefunguje, musíte pastnout příslušnou část kódu.
11.11.2005 21:16 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: carriage return
Odpovědět | | Sbalit | Link | Blokovat | Admin
Aha, pardon, už to chápu, o co vám jde... nikde se nepíše, že by \r cokoliv smazal!

Chardonnay 2003 z Colchagua Valley funguje a já už neumím číst :-)
11.11.2005 21:24 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: carriage return
Odpovědět | | Sbalit | Link | Blokovat | Admin
\r dělá to co má, co pozoruješ je nejspíš bufferování stdout:
#!/usr/bin/perl -w

use IO::Handle;

STDOUT->autoflush(1);
print "abcdef";
sleep 1;
print "\rghi";
sleep 1;
print "\n";
11.11.2005 22:02 Jiri Tomasek
Rozbalit Rozbalit vše Re: carriage return
Dik. To je hezky:-) Uz kdysi jsem mel podobne problemy, ale to jsem nevedel, ze se STDOUT takhle bufferuje a tak jsem nevedel cim to bylo...

Btw jak se autoflush nastavuje v Cecku?
12.11.2005 23:40 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: carriage return
Viz setvbuf(3).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.