dodání ihned! nové
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF

Lekce 5 - Textový výstup a speciální znaky v C# Konzoli Nové

V předchozí lekci, Textový výstup a složené formátování v C# Konzoli, jsme si ukázali, jak ovládat textový výstup svých aplikací do okna konzole pomocí metody Write() s použitím složeného formátování.

V dnešním C# tutoriálu si ukážeme metodu WriteLine() třídy Console, která nám umožňuje provádět výpis textu do okna konzole. Zároveň věnujeme prostor představení speciálních znaků a escapování.

Metoda WriteLine() je prakticky stejná jako metoda Write(), pouze s jedním podstatným rozdílem. U metody WriteLine() se na konci standardně vypisují nám už dobře známé dva znaky: ASCII 13 (Carriage return) pro návrat na začátek řádku a ASCII 10 (Line feed) pro odřádkování. To způsobí, že při použití metody WriteLine()každý nový výpis začne na začátku nového řádku.

Pokud bychom metodě Write() zadali k vypsání tyto dva znaky, pak dosáhneme stejného výsledku jako metodou WriteLine(). Můžeme to udělat dvěma způsoby, a to buď zadáním přetypovaných ASCII hodnot znaků, nebo použitím speciálních znaků.

Ukažme si syntaxi zápisu, kdy tři různé zápisy příkazového řádku nám dají totožný výsledek:

Console.WriteLine("1. Použití metody WriteLine().");
Console.Write("2. Použití přetypování ASCII znaků."+(char)13+(char)10);
Console.Write("3. Použití speciálních znaků.\r\n");
Console.Write("Ve všech třech případech došlo k výpisu na začátku nového řádku.");

Výstup:

Konzolová aplikace
1. Použití metody WriteLine().
2. Použití přetypování ASCII znaků.
3. Použití speciálních znaků.
Ve všech třech případech došlo k výpisu na začátku nového řádku.

Zde vidíme, že po každém výpisu došlo k návratu na začátek řádku a k odřádkování.

Speciální znaky

Speciální znaky jsme již nakousli, pojďme si je probrat důkladněji. Co jsou to speciální znaky? Jsou to znaky, které nám umožňují ovládat výpis. Používají se ve vypisovaných řetězcích a vždy je uvádí zpětné lomítko \. Za lomítkem pak píšeme znak, který má požadovanou speciální funkci.

Zpětné lomítko \ můžeme napsat pomocí kombinace kláves Pravý Alt+Q

Pojďme si speciální znaky ukázat:

  • \n Výpis textu na novém řádku.
  • \r Návrat kurzoru na začátek vypisovaného řádku.
  • \t Výpis mezery tabulátoru. Funguje stejně, jako když při psaní na klávesnici stiskneme tabulátor Tab.
  • \" Výpis uvozovek v textu. Pokud bychom před uvozovkami nepoužili zpětné lomítko, systém by uvozovky považoval za začátek, či konec vypisovaného řetězce.
  • \\ Výpis samotného zpětného lomítka. Používáme ho např. při zápisu cesty k určitému souboru.

Výpis zpětného lomítka

Jelikož například v zápisu cesty k určitému souboru bývá zpětných lomítek více, existuje možnost označený řetězec vypsat bez interpretace zpětných lomítek do řídících znaků.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

To uděláme tak, že před vypisovaným řetězcem uvedeme @. Tento způsob nazýváme escapování a systém poté celý řetězec interpretuje doslovně, tedy jako znaky k výpisu.

Pojďme se podívat na příklad, jak můžeme pomocí \\ a @ provést výpis cesty k souboru:

Console.WriteLine("Cesta k souboru C:\\Dokumenty\\Ruzne\\Foto1.jpg");
Console.WriteLine(@"Cesta k souboru C:\Dokumenty\Ruzne\Foto1.jpg");

Výsledek obou zápisů bude totožný:

Konzolová aplikace
Cesta k souboru C:\Dokumenty\Ruzne\Foto1.jpg
Cesta k souboru C:\Dokumenty\Ruzne\Foto1.jpg

Výpis znaků Unicode

Posledním speciálním znakem, který si představíme, bude \u0000. Tímto speciálním znakem vypisujeme znaky Unicode, kde místo 0000 píšeme číslo požadovaného znaku. Pamatujme, že kódové označení požadovaného znaku zadáváme jako číslo v šestnáctkové soustavě.

Jak číslo požadovaného znaku zjistit? Požadované znaky a jejich kódové označení můžeme snadno vyhledat v aplikaci Mapa znaků ve Windows. Mapu znaků vyvoláme z nabídky Start zadáním klíčových slov Mapa znaků. Objeví se nám tato tabulka:

Klikneme-li ukazatelem myši na nějaký znak, nejen se zvýrazní, ale dole se nám ještě objeví jeho Unicode číslo. Na obrázku je vidět zvýrazněné písmeno W a jeho Unicode číslo v šestnáctkové soustavě 0057. Pokud bychom chtěli tento znak vypsat, zadali bychom: \u0057. Stejně tak můžeme W vypsat jako ASCII znak po přetypování (char)87.

Číslo 57 v šestnáctkové soustavě je 87 v desítkové soustavě.

Použití Unicode kódování má oproti ASCII obrovskou výhodu v množství použitelných znaků, které je mnohem větší. Unicode znak můžeme také vypsat pomocí jeho čísla v šestnáctkové soustavě, které převedeme na znak příkazem Convert.ToChar(0x0000).

Místo 0000 zadáme Unicode číslo, které pro určitý znak zjistíme z Mapy znaků.

V příkladu si tyto možnosti ukážeme pro znak W:

Console.WriteLine("Zadání znaku pomocí speciálního znaku \\u0057: \tZnak = \u0057");
Console.WriteLine("Zadání znaku jako šestnáctkové číslo 0x0057: \tZnak = " + Convert.ToChar(0x0057));
Console.WriteLine("Zadání znaku jako číslo ASCII kódu (char)87: \tZnak = " + (char)87);

Výstup:

Konzolová aplikace
Zadání znaku pomocí speciálního znaku \u0057:    Znak = W
Zadání znaku jako šestnáctkové číslo 0x0057:     Znak = W
Zadání znaku jako číslo ASCII kódu (char)87:     Znak = W

Všimněme si použití speciálního znaku tabulátoru \t, který nám znaky hezky zarovná.

Vykreslení rámečku

Ukažme si, jak vypsat znaky, které lze použít k nakreslení dvojitého rámečku. Když se podíváme na mapu znaků, tak zjistíme, že tyto znaky se nacházejí od adresy 0x2550 do 0x256C. Až budeme v dalších kapitolách probírat možnosti grafiky, budou se nám tyto znaky hodit.

Nejdříve si zadáme počáteční a koncovou adresu požadovaného výpisu a z těchto hodnot vypočteme počet znaků:

ushort pocatek = 0x2550;
ushort konec = 0x256C;
int pocetZnaku = konec - pocatek;

Pak připravíme cyklus pro výpis vypočteného počtu znaků:

for (int i = 0; i <= pocetZnaku; i++)
{

}

Další příkazy píšeme dovnitř cyklu. Znaky budeme vypisovat po osmi na řádku, a pak provedeme vždy odřádkování:

if (i % 8 == 0)
    Console.WriteLine();

Poté vypíšeme adresu znaku pomocí složeného formátování se specifikátorem formátu X. Vedle adresy si zobrazíme příslušný znak tak, že vypočtenou adresu převedeme na znak:

Console.Write("{0,-4:X} ", pocatek + i);
Console.Write("{0,-4}", Convert.ToChar(pocatek + i));

Kompletní kód vypadá takto:

ushort pocatek = 0x2550;
ushort konec = 0x256C;
int pocetZnaku = konec - pocatek;
for (int i = 0; i <= pocetZnaku; i++)
{
if (i % 8 == 0) // Budeme vypisovat znaky po osmi na řádku
Console.WriteLine(); // Odřádkování

Console.Write("{0,-4:X} ", pocatek + i);
Console.Write("{0,-4}", Convert.ToChar(pocatek + i));
}

Vypíší se nám znaky včetně jejich adres:

Konzolová aplikace
2550 ═   2551 ║   2552 ╒   2553 ╓   2554 ╔   2555 ╕   2556 ╖   2557 ╗
2558 ╘   2559 ╙   255A ╚   255B ╛   255C ╜   255D ╝   255E ╞   255F ╟
2560 ╠   2561 ╡   2562 ╢   2563 ╣   2564 ╤   2565 ╥   2566 ╦   2567 ╧
2568 ╨   2569 ╩   256A ╪   256B ╫   256C ╬

V případě, že by se na adrese žádný znak nenacházel, vypsal by se otazník.

V další lekci, Grafický výstup v C# Konzoli - Parametry okna Konzole , si ukážeme, jak se dají zjistit a nastavit parametry, které určují grafickou podobu okna konzole.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 5x (146.05 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Textový výstup a složené formátování v C# Konzoli
Všechny články v sekci
Konzole C# .NET a její možnosti
Přeskočit článek
(nedoporučujeme)
Grafický výstup v C# Konzoli - Parametry okna Konzole
Článek pro vás napsal Luděk Novotný
Avatar
Uživatelské hodnocení:
1 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

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!