NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Lekce 4 - Textový výstup a složené formátování v C# Konzoli

V předešlém cvičení, Řešené úlohy k 1.-3. lekci Konzole C# .NET , jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V dnešním C# tutoriálu si ukážeme, jak pomocí metod třídy Console vypisovat text do okna konzole o něco efektivněji, než jsme tak činili dosud. Co se týče výstupu, tak pro konzolové aplikace platí jedno zásadní omezení. Okno konzole dokáže vypsat pouze text. Většinu uživatelů takový výstup v dnešní době neuspokojí, nicméně pro testování jednoduchých konzolových aplikací je to postačující.

Pomocí metod a vlastností třídy Console, určených pro výstup, můžeme našim aplikacím umožnit:

  • psát do okna konzole znaky různých znakových sad
  • měnit barvu vypisovaného textu i pozadí
  • posouvat kurzor po ploše okna, a také měnit jeho vlastnosti

Pro samotný výpis existují v zásadě dvě metody, a to Write() a WriteLine(). S oběma jsme se už v předchozích lekcích zaměřených na vstup znaků z klávesnice setkali, ovšem zatím jsme je používali v jejich nejjednodušší formě. V dnešním tutoriálu se podíváme na vypisování textu pomocí metody Write().

Jak už víme z kurzu Základní konstrukce jazyka C#. NET, metoda Write() vypíše do okna konzole to, co specifikujeme v závorkách. Může to být:

  • řetězec znaků, který uzavřeme do uvozovek
  • proměnná
  • kombinace obojího

Pro zopakování uveďme příklad kombinace výpisu řetězců znaků a proměnných. Všimněme si, že jednotlivé položky výpisu se propojují znaménkem +:

Klikni pro editaci
  • int vek = 25;
    int vaha = 86;
    int vyska = 178;
    Console.Write("Jan má " + vek + " let, váží " + vaha + " kg a měří " + vyska + " cm.");
    
    • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

    Výstup:

    Konzolová aplikace
    Jan má 25 let, váží 86 kg a měří 178 cm.

    Složené formátování

    V lekci Typový systém podruhé: Datové typy v C# .NET jsme se seznámili s jednoduchou formou složeného formátování. Ukažme si tedy, jak docílit stejného výsledku jako v předchozím případě pomocí složeného formátování:

    Klikni pro editaci
    • int vek = 25;
      int vaha = 86;
      int vyska = 178;
      Console.Write("Jan má {0} let, váží {1} kg a měří {2} cm.", vek, vaha, vyska);
      
      • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

      Výstup:

      Konzolová aplikace
      Jan má 25 let, váží 86 kg a měří 178 cm.

      Vidíme, že výsledek je shodný, nicméně použitím složeného formátování je kód kratší a přehlednější.

      Ještě větší přehlednosti můžeme docílit nahrazením funkce složeného formátování interpolovaným řetězcem:

      int vek = 25;
      int vaha = 86;
      int vyska = 178;
      Console.Write($"Jan má {vek} let, váží {vaha} kg a měří {vyska} cm.");

      Výstup:

      Konzolová aplikace
      Jan má 25 let, váží 86 kg a měří 178 cm.

      Interpolovaný řetězec je dostupný od verze C# 6.0.

      Zástupné značky

      Principem složeného formátování je vkládání takzvaných zástupných značek do řetězce, namísto kterých se při výpisu zobrazí hodnoty proměnných, které jsou vypsány za řetězcem v daném pořadí. Zástupné značky se píšou do složených závorek a vždy začínají nulou. V předchozím příkladu přísluší tedy proměnné vek zástupná značku {0}, vaha má zástupnou značku {1} a vyska má zástupnou značku {2}. Zástupné značky se ale nemusí vypisovat v tom pořadí, v jakém jsou číslovány. Např. {2} může být volána před {1}, a také se na jednu proměnnou mohou odkazovat v textovém řetězci vícekrát, například:

      Klikni pro editaci
      • string zena = "Eva";
        string muz = "Jan";
        string zvire = "koně";
        Console.Write("{1} má {2}, {0} má taky {2}.", muz, zena, zvire);
        
        • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

        Výstup:

        Konzolová aplikace
        Eva má koně, Jan má taky koně.

        Požadavek na zarovnání

        Ve složených závorkách může být kromě samotné pozice zástupné značky i požadavek na zarovnání, který je oddělen čárkou. Ten se udává jako celé číslo, které reprezentuje počet znaků, na který se vypisovaná proměnná doplní mezerami. Je-li číslo záporné, proměnná se zarovná doleva, je-li kladné, zarovná se doprava. Toho využíváme v tabulkových výpisech.

        Například v následujícím příkladu vyhradíme pro název nákladu 11 znaků a zarovnáme jej doleva, pro hmotnost vyhradíme 5 znaků a zarovnáme ji doprava:

        string[] naklad = { "uhlí", "brambory", "dřevo", "písek" };
        int[] hmotnost = { 20, 8, 34, 154 };
        for (int i = 0; i < 4; i++)
        Console.Write("{0,-11} {1,5} tun\n", naklad[i], hmotnost[i]);

        Výstup:

        Konzolová aplikace
        uhlí          20 tun
        brambory       8 tun
        dřevo         34 tun
        písek        154 tun

        Požadavek na formát

        Kromě požadavku na zarovnání můžeme přidat do složených závorek zástupných značek i požadavek na formát, v jakém se má daná proměnná zobrazit. Jakékoliv číslo tak můžeme zobrazit v šestnáctkové soustavě (specifikátor formátu X), ve vědeckém formátu jako číslo × 10^n (specifikátor formátu E), nebo v desítkové soustavě (specifikátor formátu N).

        Specifikátor formátu se odděluje dvojtečkou. V následujícím příkladu se vypíše jedno a to samé číslo reprezentované zástupnou značkou {0} ve formátu X, E a N:

        Klikni pro editaci
        • int cislo = 56;
          Console.Write("Číslo {0} ve formátu X={0:X}, E={0:E} a N={0:N}", cislo);
          
          • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

          Výstup:

          Konzolová aplikace
          Číslo 56 ve formátu X=38, E=5,600000E+001 a N=56,00

          Všimněme si, že číslo v desítkové soustavě můžeme přímo zobrazit v šestnáctkové soustavě aniž bychom je museli převádět. Samotné číslo se nemění a zůstává uloženo v desítkové soustavě.

          Specifikátor formátu N pro desítkovou soustavu může být následován celým číslem, které udává počet zobrazovaných desetinných čísel, přičemž při zobrazování se zaokrouhluje. Opět ale platí, že hodnota v proměnné cislo se nemění. Například:

          Klikni pro editaci
          • double cislo = 56.2356894;
            Console.Write("Číslo {0} ve formátu N1={0:N1}, N2={0:N2}, N3={0:N3}, N4={0:N4}", cislo);
            
            • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

            Výstup:

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

            Úplné složené formátování

            Samozřejmě, že zástupné značky mohou obsahovat jak požadavek na zarovnání, tak i požadavek na formát. To je výhodné při výpisu hodnot např. do tabulky. Má-li číslo méně desetinných míst, doplní se na požadovaný počet desetinných míst nuly. Má-li číslo více desetinných míst, zaokrouhlí se.

            V následujícím příkladu pro každé zobrazované číslo reprezentované zástupnou značkou {1} vyhradíme 8 znaků, zarovnáme je doprava a vypíšeme je s přesností na dvě desetinná místa:

            Klikni pro editaci
            • double[] cislo = { 25.3, 189, 2.56698 };
              for (int i = 0; i < 3; i++)
              Console.Write("číslo {0} = {1,8:N2}\n", i, cislo[i]);
              
              • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

              Stejně můžeme formátovat i interpolovaný řetězec. Zápis výše uvedeného příkladu by pak vypadal takto:

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

              Výstup bude v obou případech stejný:

              Konzolová aplikace
              číslo 0 =    25,30
              číslo 1 =   189,00
              číslo 2 =     2,57

              Ostatní specifikátory formátu

              Specifikátorů formátu je samozřejmě více, než jsme zatím uvedli. Jsou to například C - specifikátor pro měnu, P – specifikátor pro procenta, anebo celá skupina formátovacích značek pro datum a čas.

              Ukážeme si, jak je možno vypsat aktuální čas v dlouhém formátu hh:mm:ss (formátovací značka T) a v krátkém formátu hh:mm (formátovací značka t):

              Klikni pro editaci
              • Console.Write("Aktuální čas T je: {0:T}", DateTime.Now);
                Console.Write("\nAktuální čas t je: {0:t}", DateTime.Now);
                
                • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                Výstup:

                Konzolová aplikace
                Aktuální čas T je: 17:41:36
                Aktuální čas t je: 17:41

                Ve výše uvedeném příkladu si vyzkoušejte další formátovací značky pro datum a čas, jako například d, dddd, D, f, g, hh, MMMM.

                V další lekci, Textový výstup a speciální znaky v C# Konzoli, si ukážeme směrování textového výstupu aplikací do okna konzole pomocí metody WriteLine() s použitím speciálních znaků a escapování.


                 

                Jak se ti líbí článek?
                Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
                Předchozí článek
                Řešené úlohy k 1.-3. lekci Konzole C# .NET
                Všechny články v sekci
                Konzole C# .NET a její možnosti
                Přeskočit článek
                (nedoporučujeme)
                Textový výstup a speciální znaky v C# Konzoli
                Článek pro vás napsal Luděk Novotný
                Avatar
                Uživatelské hodnocení:
                5 hlasů
                Autor je technik, má rád stručné a jasné texty, a tak se také snaží psát články pro vás.
                Aktivity