ARCHIV |
|||||||||||||||||||||||||||||||||||||||||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Perl (33) - Formátování výstupu - printfPopis a užití funkcí pro formátování textu. Formátovat text lze v Perlu dvěma způsoby. Pro jednodušší, většinou jednořádkový text, je většinou nejvýhodnější použít funkci printf, která je přejatá z jazyka C. Druhou možností formátování je použití formátů. Tato metoda je určena pro komplikovanější výstup. Funkce printf a sprintfFunkce printf v jazycích C a Perl funguje prakticky stejně. Lze pomocí ní zaokrouhlovat, formátovat čísla do požadovaného tvaru, převádět mezi základními číselnými soustavami apod. Obecnou syntaxi této funkce můžeme zapsat následovně.
printf OVLADAČ (formát, seznam);
Ovladačem se určuje, kam bude směřovat výstup a formát je šablona, do které budou vloženy aktuální hodnoty proměnných uvedených v seznamu. sprintf dělá s řetězcem úplně to samé, ale rozdíl oproti printf je v tom, že zatímco printf formátovaný text tiskne, sprintf ho vrací. To je výhodné v okamžiku, kdy s naformátovaným řetězcem budeme ještě chtít pracovat. V seriálu jsme se o potřebnosti této funkce již přesvědčili. V 22. dílu jsme potřebovali zaokrouhlit hodnotu na 2 desetinné číslice a dále s ní pracovat. Pro srovnání s funkcí printf se podívejme na následující dva zápisy, které jsou ve výsledku ekvivalentní.
printf OVLADAČ formát, seznam; Formátovací řetězecNyní již přistupme k významu parametrů. Formát je speciální řetězec, který obsahuje zástupné znaky. Každému zástupnému znaku je v seznamu hodnot přiřazena nějaká proměnná. Její obsah se vloží vždy na místo příslušného zástupného znaku a zároveň se zformátuje podle určené šablony. Zde je tabulka se základními formátovacími řetězci, které budeme dále rozšiřovat.
Podívejme se na konkrétní příklady.
$f = 350 / 3;#v $f je hodnota 116.666666666667 Toto byly příklady toho nejjednoduššího užití. Řídící sekvence začínající znakem % mají ve skutečnosti mnohem rozsáhlejší syntaxi. Zde je její kompletní zápis.
%[příznaky][minimální_délka][.počet_desetinných míst]typ To, co jsme si doposud ukázali bylo určení typu. Právě typ musí obsahovat každý formátovací řetězec. Vše ostatní je nepovinné. Příznaky určují způsob, jakým se bude hodnota zarovnávat. Pokud by zabírala hodnota méně znaků, než kolik je v šabloně, lze nastavit na jakou stranu hodnotu zarovnat a případně čím.
Minimální délka specifikuje, kolik znaků bude minimálně číslo nebo řetězec zabírat. Pokud je hodnota kratší než minimální délka, doplní se například mezerami. Záleží na nastavení příznaku. Počet desetinných míst (tedy počet číslic za desetinnou tečkou) určuje přesnost. Začíná vždy tečkou. U celých čísel a řetězců určuje maximální délku.
printf("Dvojkové číslo s prefixem. %#b", 9444);#0b10010011100100 Další možnostiPřesnost čísla pomocí proměnných lze zadávat i pomocí znaku *. Tyto zápisy mají stejný význam.
printf ">%${pocet}d<", 5; Pomocí sekvence \$ lze určovat, který argument ze seznamu se použije.
printf "%2\$d", 11, 22, 33; Do formátovacího řetězce můžeme připsat znak v a řetězec se rozloží na celá čísla oddělená implicitně tečkou.
printf "%vd/font>\n", 123;
printf umí ještě další věci, ale již jen odkazuji na manuálovou stránku perlfunc(1). Formátovaný výpis ASCII tabulkyAbychom si ukázali trochu více než pouhé modelové příklady, pokusíme se zformátovat ASCII tabulku. Napíšeme tedy program, který načte ze vstupu jméno souboru a do něj uloží znaky 33 - 126 z ASCII tabulky. Na každém řádku bude znak a jeho desítkový, osmičkový a šestnáctkový zápis.
#!/usr/bin/perl Celý algoritmus je velmi jednoduchý. Zaměříme se hlavně na funkci printf. Všimněme si, že se tiskne čtyřikrát totéž číslo, pokaždé však jinak zformátované. Poprvé jako znak s velikostí 4. Další 3 sloupce mají velikost 3 a určují pořadí znaku v ASCII tabulce. Soubor, do kterého bude tabulka uložena se nám takto hezky srovná: ZNAK DEC OCT HEX ... < 60 74 3c = 61 75 3d > 62 76 3e ? 63 77 3f @ 64 100 40 A 65 101 41 B 66 102 42 C 67 103 43 D 68 104 44 ... Tabulka goniometrických funkcíNa dalším příkladu si předvedeme použití sprintf. Vytvoříme tabulku se třemi sloupci. V prvním bude hodnota a v dalších její sinus a kosinus s přesností 5 desetinných míst. Použijeme přitom hodnoty z intervalu <0; 2pi> po osminách. Tabulka musí mít nějakou hlavičku a rámeček. K tomu budeme ale potřebovat znát předem její šířku. Jak ji ale zjistíme dříve, než vypíšeme hlavičku? Naštěstí je tu funkce sprintf. Nic vypisovat nebudeme, formátovanou hlavičku jen uložíme do proměnné a zjistíme její délku pomocí speciální sekvence %n. Až teď můžeme tisknout horní rámeček.
my $hlava = sprintf("| %11s | %8s | %8s | %n\n", "x", "sin x", "cos x", my $n); Teď konečně přijde na řadu obsah tabulky. Musíme zachovat šířku buněk.
my $osmina_pi = atan2(1,1) / 2; Tabulku nakonec musíme uzavřít.
print $line;
Tímto získáváme na standardním výstupu formátovanou tabulku.
Související články
Předchozí Celou kategorii (seriál) Další
Perl (1) - Dávka teorie na úvod
Perl (2) - Úvod do syntaxe Perl (3) - Proměnné Perl (4) - Čísla a řetězce Perl (5) - Podmínky Perl (6) - Pravdivostní výrazy Perl (7) - Vstup poprvé Perl (8) - Některé základní vestavěné funkce Perl (9) - Cykly Perl (10) - Další řídící struktury Perl (11) - Pole - úvod Perl (12) - Pole - základní operace Perl (13) - Hashe Perl (14) - Další nástroje pro seznamy Perl (15) - Výchozí proměnná, heredoc, symbolické odkazy Perl (16) - Regulární výrazy - začínáme Perl (17) - Regulární výrazy - kotvy Perl (18) - Regulární výrazy - množiny znaků Perl (19) - Regulární výrazy - opakování a kvantifikátory Perl (20) - Regulární výrazy - magické závorky Perl (21) - Regulární výrazy - nahrazování Perl (22) - Regulární výrazy - přepínače Perl (23) - Regulární výrazy - rozšířené vzory Perl (24) - Regulární výrazy - příklady Perl (25) - Regulární výrazy - závěr Perl (26) - Podprogramy Perl (27) - Prototypy Perl (28) - Rozsahy platnosti proměnných Perl (29) - Úvod k práci se soubory Perl (30) - Práce se soubory Perl (31) - Testování souborů Perl (32) - Jiné typy souborů Perl (34) - Formátování výstupu - formáty Perl (35) - Vestavěný debugger Perl (36) - Grafické debuggery Perl (37) - Začínáme s moduly Perl (38) - Rozhraní modulu Perl (39) - Pragma Perl (40) - Dodatky k modulům Perl (41) - CPAN Perl (42) - Argumenty příkazového řádku Perl (43) - Přepínače Perl (44) - Dlouhé přepínače Perl (45) - Odkazy Perl (46) - Užití odkazů a anonymní data Perl (47) - Složitější datové struktury Perl (48) - Libovolně složité datové struktury Perl (49) - Tabulky symbolů a typegloby Perl (50) - Uzávěry a iterátory Perl (51) - Signály Perl (52) - Externí příkazy Perl (53) - Režim nakažení Perl (54) - Fork Perl (55) - Eval Perl (56) - Volby příkazu perl Perl (57) - Jednořádkové skripty Perl (58) - OOP - úvod Perl (59) - OOP - typické použití Perl (60) - OOP - dědičnost Perl (61) - OOP - přínos a užití dědičnosti Perl (62) - OOP - přetěžování Perl (63) - OOP - závěr Perl (64) - Projekt - čtečka sportovních výsledků Perl (65) - Projekt - získání dat Perl (66) - Projekt - výběr zápasů a podrobnosti Perl (67) - Projekt - dokončujeme modul Perl (68) - Projekt - zobrazení zápasů Perl (69) - Projekt - online přenos Perl (70) - Plain Old Documentation Perl (71) - Navazování proměnných Perl (72) - Navazování složitějších datových typů Perl (73) - DBM Perl (74) - Sockety Perl (75) - Obsluha více klientů Perl (76) - Síťová hra v kostky Perl (77) - Služby internetu Perl (78) - Databáze - úvod Perl (79) - Databáze - manipulace s daty Perl (80) - Databáze - závěrečné poznámky Perl (81) - CGI - příprava webového serveru Perl (82) - CGI - první skripty Perl (83) - CGI - získávání dat od uživatele Perl (84) - CGI - usnadnění tvorby skriptů pomocí modulu CGI Perl (85) - CGI - generování dokumentu modulem CGI Perl (86) - CGI - cookies Perl (87) - CGI - příklad aplikace Perl (88) - CGI - závěr Perl (89) - Mason - snadné psaní webů Perl (90) - Mason - speciální bloky Perl (91) - Mason - handlery Perl (92) - Mason - závěr Perl (93) - Catalyst - MVC framework pro Perl Perl (94) - Catalyst - základy pro psaní aplikace Perl (95) - Catalyst - šablony Perl (96) - Catalyst - spolupráce s databází Perl (97) - Curses - tvorba textových uživatelských rozhraní Perl (98) - Curses - pozicování a okna Perl (99) - Curses - měření rychlosti psaní Perl (100) - Curses - použití hotových widgetů Perl (101) - Curses - jednoduchý textový editor Perl (102) - Rozšiřování Perlu pomocí XS Perl (103) - Rozšiřování Perlu pomocí SWIG Perl (104) - Testování rychlosti Perl (105) - Testování programových jednotek Perl (106) - Debugování pomocí komentářů Perl (107) - Moose - moderní objektový systém Perl (108) - Moose - základní vlastnosti Perl (109) - Moose - role Perl (110) - Moose - meta API Perl (111) - Pokročilá práce se seznamy Perl (112) - Práce s PDF Perl (113) - Práce s archivy Perl (114) - Tk - úvod Perl (115) - Tk - umísťování widgetů Perl (116) - Tk - základní widgety Perl (117) - Tk - některé pokročilejší widgety Perl (118) - Tk - čas a události Perl (119) - Tk - CD man Perl (120) - Wx - základní práce s widgety Perl (121) - Wx - události Perl (122) - Gtk2 - úvod Perl (123) - Gtk2 - základní práce s obrázky Perl (124) - Gtk2 - události a čas Perl (125) - Gtk2 - vlastní widgety Perl (126) - Gtk2 - textové okno a práce s pozicemi Perl (127) - Gtk2 - hierarchické seznamy Perl (128) - Gtk2 - dialogy Perl (129) - Gtk2 - skládání widgetů Perl (130) - Gtk2 - menu a toolbary Perl (131) - Gtk2 - transparentní okna, tray ikona, výběr souborů Perl (132) - Gtk2 - drag&drop, druid Perl (133) - Gtk2 - úpravy vzhledu aplikací pomocí rc Perl (134) - Gtk2 - Glade Interface Designer Perl (135) - XML - čtení a zápis Perl (136) - XML - DOM a SAX přístupy Perl (137) - Vlákna Perl (138) - Memoizace - cachování podprogramů Perl (139) - Profilling - efektivní odhalování pomalých míst v programu Perl (140) - Profilling - píšeme si vlastní profiler / debugger Perl (141) - Formátování kódu, deparsování, perltidy Perl (142) - Způsoby konfigurování Perl (143) - Struktura datových typů, správa paměti Perl (144) - POE - událostmi řízené programování Perl (145) - POE - aplikace typu klient-server Perl (146) - Perl 6 - jazyk budoucnosti Perl (147) - Perl 6 - regulární výrazy, nové operátory Perl (148) - Perl Culture Perl (149) - Závěr Pozvánka na Český Perl Workshop Perl 5.22.0 a vše okolo Perl 5.24.0 a vše okolo Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||||||||||||||||||||||||||||||||||||||||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |