Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

3. diel - Textový výstup do okna konzoly a zložené formátovanie

V predchádzajúcej lekcii, Analýza dát zo vstupu z klávesnice , sme sa dozvedeli, čo všetko možno zistiť zo zadávaných dát z klávesnice a ukázali sme si postupy, ako možno tieto informácie získať a nakladať s nimi.

V dnešnom C# tutoriálu si ukážeme, ako pomocou metód triedy Console vypisovať text do okna konzoly o niečo efektívnejšie, než sme tak robili doteraz. Čo sa týka výstupu, tak pre konzolové aplikácie platí jedno zásadné obmedzenia. Okno konzoly dokáže vypísať iba text. Väčšinu užívateľov taký výstup v dnešnej dobe neuspokojí, však pre testovanie jednoduchých konzolových aplikácií je to postačujúce.

Pomocou metód a vlastností triedy Console, určených pre výstup, môžeme našim aplikáciám umožniť:

  • písať do okna konzoly znaky rôznych znakových sád
  • meniť farbu vypisovaného textu aj pozadie
  • posúvať kurzor po ploche okna, a tiež meniť jeho vlastnosti

Pre samotný výpis existujú v zásade dve metódy, a to Write() a WriteLine(). S oboma sme sa už v predchádzajúcich lekciách zameraných na vstup znakov z klávesnice stretli, avšak zatiaľ sme ich používali v ich najjednoduchšej forme. V dnešnom tutoriálu sa pozrieme na vypisovanie textu pomocou metódy Write().

Ako už vieme z kurzu Základná konštrukcia jazyka C #. NET, metóda Write() vypíše do okna konzoly to, čo špecifikujeme v zátvorkách. Môže to byť:

  • reťazec znakov, ktorý uzavrieme do úvodzoviek
  • premenná
  • kombinácia oboch

Pre zopakovanie uveďme príklad kombinácie výpisu reťazcov znakov a premenných. Všimnime si, že jednotlivé položky výpisu sa prepájajú znamienkom +:

            int vek = 25;
            int vaha = 86;
            int vyska = 178;
            Console.Write("Jan má " + vek + " rokov, váži " + vaha + " kg a meria " + vyska + " cm.");

výstup:

Konzolová aplikácia
Jan má 25 rokov, váži 86 kg a meria 178 cm.

Zložené formátovanie

V lekcii Typový systém druhýkrát: Dátové typy v C# .NET sme sa zoznámili s jednoduchou formou zloženého formátovania. Ukážme si teda, ako docieliť rovnaký výsledok ako v predchádzajúcom prípade pomocou zloženého formátovania:

          int vek = 25;
          int vaha = 86;
          int vyska = 178;
          Console.Write("Jan má {0} rokov, váži {1} kg a meria {2} cm.", vek, vaha, vyska);

výstup:

Konzolová aplikácia
Jan má 25 rokov, váži 86 kg a meria 178 cm.

Vidíme, že výsledok je zhodný, avšak použitím zloženého formátovanie je kód kratšie a prehľadnejšie.

Ešte väčšie prehľadnosti môžeme docieliť nahradením funkcie zloženého formátovania interpolovaným reťazcom:

int vek = 25;
int vaha = 86;
int vyska = 178;
Console.Write($"Jan má {vek} rokov, váži {vaha} kg a meria {vyska} cm.");

výstup:

Konzolová aplikácia
Jan má 25 rokov, váži 86 kg a meria 178 cm.

Interpolovaný reťazec je dostupný od verzie C# 6.0.

Zástupné značky

Princípom zloženého formátovanie je vkladanie takzvaných zástupných značek do reťazca, namiesto ktorých sa pri výpise zobrazia hodnoty premenných, ktoré sú vypísané za reťazcom v danom poradí. Zástupné značky sa píšu do zložených zátvoriek a vždy začínajú nulou. V predchádzajúcom príklade prislúcha teda premenné vek zástupná značku {0}, vaha má zástupnú značku {1} a vyska má zástupnú značku {2}. Zástupné značky sa ale nemusí vypisovať v tom poradí, v akom sú očíslované. Napr. {2} môže byť volaná pred {1}, a tiež sa na jednu premennú môžu odkazovať v textovom reťazci viackrát, napríklad:

          string zena = "Eva";
          string muz = "Jan";
          string zvire = "kone";
          Console.Write("{1} má {2}, {0} má taky {2}.", muz, zena, zvire);

výstup:

Konzolová aplikácia
Eva má koňa, Jan má taky kone.

Požiadavka na zarovnanie

V zložených zátvorkách môže byť okrem samotnej pozície zástupné značky aj požiadavka na zarovnanie, ktorý je oddelený čiarkou. Ten sa udáva ako celé číslo, ktoré reprezentuje počet znakov, na ktorý sa vypisovanie premenná doplní medzerami. Ak je číslo záporné, premenná sa zarovná doľava, ak je kladné, zarovná sa doprava. Toho využívame v tabuľkových výpisoch.

Napríklad v nasledujúcom príklade vyhradíme pre názov nákladu 11 znakov a zarovnáme ho doľava, pre hmotnosť vyhradíme 5 znakov a zarovnáme ju doprava:

          string[] naklad = { "uhlie", "zemiaky", "drevo", "piesok" };
          int[] hmotnost = { 20, 8, 34, 154 };
          for (int i = 0; i < 4; i++)
            Console.Write("{0,-11} {1,5} ton\n", naklad[i], hmotnost[i]);

výstup:

Konzolová aplikácia
uhlie          20 tun
zemiaky       8 tun
drevo         34 tun
piesok        154 tun

Požiadavka na formát

Okrem požiadavky na zarovnanie môžeme pridať do zložených zátvoriek zástupných značiek aj požiadavka na formát, v akom sa má daná premenná zobraziť. Akékoľvek číslo tak môžeme zobraziť v hexadecimálne (Špecifikátor formátu X), vo vedeckom formáte ako číslo × 10^n (Špecifikátor formátu E), alebo v desiatkovej sústave (Špecifikátor formátu N).

Špecifikátor formáte sa oddeľuje dvojbodkou. V nasledujúcom príklade sa vypíše jedno a to isté číslo reprezentovanej zástupnú značkou {0} vo formáte X, E a N:

          int cislo = 56;
          Console.Write("Číslo {0} vo formáte X={0:X}, E={0:E} a N={0:N}", cislo);

výstup:

Konzolová aplikácia
Číslo 56 vo formáte X=38, E=5,600000E+001 a N=56,00

Všimnime si, že číslo v desiatkovej sústave môžeme priamo zobraziť v šestnástkovej sústave bez toho aby sme ich museli prevádzať. Samotné číslo sa nemení a zostáva uložené v desiatkovej sústave.

Špecifikátor formátu N pre desiatkovú sústavu môže byť nasledovaný celým číslom, ktoré udáva počet zobrazovaných desatinných čísel, pričom pri zobrazovaní sa zaokrúhľuje. Opäť ale platí, že hodnota v premennej cislo sa nemení. napríklad:

double cislo = 56.2356894;
Console.Write("Číslo {0} vo formáte N1={0:N1}, N2={0:N2}, N3={0:N3}, N4={0:N4}", cislo);

výstup:

Konzolová aplikácia
Číslo 56,2356894 ve formátu N1=56,2, N2=56,24, N3=56,236, N4=56,2357

Úplné zložené formátovanie

Samozrejme, že zástupné značky môžu obsahovať ako požiadavka na zarovnanie, tak aj požiadavka na formát. To je výhodné pri výpise hodnôt napr. Do tabuľky. Ak má číslo menej desatinných miest, doplní sa na požadovaný počet desatinných miest nuly. Ak má číslo viac desatinných miest, zaokrúhli sa.

V nasledujúcom príklade pre každé zobrazované číslo reprezentovanej zástupnú značkou {1} vyhradíme 8 znakov, zarovnáme je doprava a vypíšeme je s presnosťou na dve desatinné miesta:

          double[] cislo = { 25.3, 189, 2.56698, 1896.356 };
          for (int i = 0; i < 4; i++)
            Console.Write("číslo {0} = {1,8:N2}\n", i, cislo[i]);

výstup:

Konzolová aplikácia
číslo 0 =    25,30
číslo 1 =   189,00
číslo 2 =     2,57
číslo 3 = 1 896,36

Ostatné špecifikátory formáte

Špecifikátorov formátu je samozrejme viac, než sme zatiaľ uviedli. Sú to napríklad C - Špecifikátor pre menu, P - Špecifikátor pre percenta, alebo celá skupina formátovacích značiek pre dátum a čas.

Ukážeme si, ako je možné vypísať aktuálny čas v dlhom formáte hh:mm:ss (formátovacie značka T) a v krátkom formáte hh:mm (formátovacie značka t):

          Console.Write("Aktuálny čas T je: {0:T}", DateTime.Now);
          Console.Write("\nAktuálny čas t je: {0:t}", DateTime.Now);

výstup:

Konzolová aplikácia
Aktuálny čas T je: 17:41:36
Aktuálny čas t je: 17:41

 

Predchádzajúci článok
Analýza dát zo vstupu z klávesnice
Všetky články v sekcii
Konzoly C # .NET a jej možnosti
Článok pre vás napísal Luděk Novotný
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je technik, má rád stručné a jasné texty, a tak se také snaží psát články pro vás.
Aktivity