Odstranění diakritiky
2. OdstraneniDiakritikyWPF
2.4. C#
V souboru MainWindow.xaml.cs obsahující kód na pozadí (Code Behind) byla vygenerována základní struktura našeho programu v C#. Vedle konstruktoru MainWindow této třídy byly také vygenerovány soukromé (private) metody bez návratu, které umístíme do oblasti Události:
- BtnOdstranitDiakritiku_Click
- BtnKonec_Click
private void BtnOdstranitDiakritiku_Click(object sender, RoutedEventArgs e) { /* Deklarace: 'vstupniText' ... textový řetězec zadaný uživatelem, u něhož * má být odstraněna diakritika */ string vstupniText; // Načtení textového řetězce zadaného na formuláři vstupniText = this.TxtVstupniText.Text; // Zavolání metody, která navrací textový řetězec bez diakritiky this.TxtVystupniText.Text = OdstranitDiakritiku(vstupniText); }
Kód 1: Deklarace metody pro převod čísla do zvolené soustavy (BtnOdstranitDiakritiku_Click)
Do regionu Výpočty umístíme metodu, která bude z předaného textu (načteného z formuláře) odstraňovat diakritiku.
Do deklarované metody OdstranitDiakritiku s textovým návratem je předán načtený text z formuláře - viz Kód 2. Tento parametr je předán hodnotou, tzn. jeho hodnota je nakopírována do formálního parametru s ve volané metodě. Na začátku těla metody jsou deklarovány následující proměnné. U některých z těchto proměnných je v deklaraci zároveň provedena inicializace:
- bezDia ... výstupní textový řetězec, tj. vstupní řetězec po odstranění diakritiky - inicializace prázdným textem
- poceZnaku ... celočíselný počet znaků ve vstupním řetězci - inicializace délkou (počtem znaků) vstupního řetězce
- sDiakritikou ... textový řetězec obsahující diakritiku - inicializace znaky s diakritikou
- bezDiakritiky ... textový řetězec neobsahující diakritiku - inicializace stejnými znaky ale bez diakritiky
- i ... pozice znaku ve vstupním textovém řetězci
V metodě je použit stejný princip jako v příkladu OdstraneniDiakritiky pro konzolovou aplikaci, proto již není nutné znovu popisovat prováděné příkazy uvnitř metody.
/// <summary> /// Metoda s návratem textového řetězce bez diakritických znamének /// </summary> /// <param name="s"> vstupní řetězec s diakritikou </param> /// <returns> výstupní řetězec bez diakritiky </returns> private string OdstranitDiakritiku(string s) { /* Deklarace: 'bezDia' ... výstupní řetězec, tj. vstupní řetězec po odstranění * diakritiky - inicializace; 'pocetZnaku' ... počet znaků ve vstupním řetězci - * inicializace */ string bezDia = ""; int pocetZnaku = s.Length; ; // Deklarace textového řetězce obsahujícího diakritiku včetně inicializace const string sDiakritikou = "ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťúůÚÝýŽž"; // Deklarace textového řetězce neobsahujícího diakritiku včetně inicializace const string bezDiakritiky = "AaCcDdEeEeIiNnooRrSsTtuuUYyZz"; /* Pro každý znak ve vstupním textovém řetězci - 'i' ... pozice znaku ve vstupním textovém řetězci */ for (int i = 0; i < pocetZnaku; i++) { /* Pokud textový řetězec s diakritikou obsahuje znak na 'i'-té pozici ve vstupním * textovém řetězci */ if (sDiakritikou.Contains(s[i]) == true) { /* Pro každý znak v řetězci 'sDiakritikou' - 'j' ... pozice znaku * v řetězci s diakritikou */ for (int j = 0; j <= sDiakritikou.Length - 1; j++) { /* Pokud se znak ve vstupním řetězci na pozici 'i' nachází také v textovém * řetězci 'sDiakritikou' (na pozici 'j'), tj. obsahuje diakritiku ... */ if (s[i] == sDiakritikou[j]) { /* Připoj znak z řetězce 'bezDiakritiky' na stejné pozici 'j', na které * byl vyhledán v řetězci 'sDiakritikou' (prohození znaku s diakritikou * za znak bez diakritiky) */ bezDia += bezDiakritiky[j]; } } } else { // Přidej znak ze vstupního řetězce do výstupního řetězce bezDia += s[i]; } } // Přiřazení návratu metody return bezDia; }
Kód 2: Deklarace soukromé metody s textovým návratem (OdstranitDiakritiku)
Poslední metodou v regionu Události, kterou musíme upravit je metoda pro obsluhu události Click tlačítka Konec. Tato metoda nám zavře formulář - viz Kód 3.
private void BtnKonec_Click(object sender, RoutedEventArgs e) { // Zavření formuláře this.Close(); }
Kód 3: Deklarace metody bez návratu pro zavření formuláře (BtnKonec_Click)