Powrót do C#

Formatowanie tekstu

Pierwszą rzeczą, jaką będzie robił nasz program to komunikacja z użytkownikiem. Moim zdaniem wiedza na temat formatowaniu tekstu jest kluczowa do budowania programów. Ponieważ użytkownik, korzystając z programu, zazwyczaj chce uzyskać jakąś informację, program musi wiedzieć, co ma robić, gdy użytkownik podejmuje jakieś działanie. Jedyną drogą komunikacji, jaką chwilowo mamy jest „Console.ReadLine()”, kluczowa dla późniejszych lekcji będzie dla nas wiedza jak wprowadzony tekst sformatować, obrobić i czytać. Dla programu nie jest oczywiste, że wprowadzony tekst Maciek, Michał, czy Piotrek to imię, dla programu to ciąg znaków, mający swoją długość, początek i koniec. Dopiero dzięki nam i pewnym wyróżnionym dla nas cechom, program rozpozna czy jest to imię, przedmiot czy polecenie. Wpisany tekst ”   Piotrek    ” wcale nie jest równoznaczny wpisanemu tekstowi „Piorek”, ponieważ ten pierwszy posiada spacje przed słowem i po słowie, ma inną długość i dla programu nie jest tym samym. Każdy tekst, słowo składa się ze znaków, których rodzaj to „Char”, w zależności od tego, w jakim kraju jesteśmy, jaki system mamy zainstalowany, nasz komputer dobiera znaki na podstawie ich wartości numerycznych w tabeli. Podstawową tabelą znaków jest tabela ASCII, która zawiera podstawowe znaki od 0 do 127 (tutaj pełna tabela ASCII), dodatkowo znaki od 128 do 255 są dodawane na podstawie tabeli ISO, która jest różna w zależności od tego, z jakiego języka korzystamy na komputerze. Aby sprawdzić, jaki numer w tabeli ma znak wystarczy wywołać metodę:

            Console.WriteLine((char)243);
            Console.WriteLine((int)'x');

            //Wyświetli:
            //ó
            //120

która wyświetli reprezentację numeryczną znaku i zamieni liczbę na znak, tak więc słowo:

”   Piotrek    ” odebrane będzie przez komputer jako „32,32,32,80,105,111,116,114,101,107,32,32,32” a głębiej jako kombinację zer i jedynek, skupmy się jednak na reprezentacji dziesiętnej, tak więc „32,32,32,80,105,111,116,114,101,107,32,32,32” wcale nie jest równe „80,105,111,116,114,101,107”. Omówimy sobie teraz kilka bardzo przydatnych elementów, które pomogą nam podczas obróbki tekstu. Aby sprawdzić długość tekstu, należy wykorzystać metodę „Length”:

            Console.Write("Wpisz tekst: ");
            string x = Console.ReadLine();
            Console.WriteLine("twój tekst '" + x + "' jest długości: " + x.Length);

            //Wyświetli:
            //Wpisz tekst: test
            //twój tekst 'test' jest długości: 4

Puste pola po słowie lub przed słowem, zazwyczaj nazywa się Whitespace, występują zazwyczaj w bazach danych, gdy wpis ma z góry narzuconą wielkość, a tekst jest krótszy od tej długości, wtedy pusta przestrzeń wypełniana jest spacjami. Aby ją usunąć, stosuje się metody:

            Console.Write("|");
            Console.Write("      WhiteSpace      ".TrimStart()); // usunie spacje na początku
            Console.Write("|");
            Console.Write("      WhiteSpace      ".TrimEnd()); // usunie spacje na końcu
            Console.Write("|");
            Console.Write("      WhiteSpace      ".Trim()); // usunie spacje na początku i na końcu
            Console.Write("|");

            //Wyświetli:
            //|WhiteSpace      |      WhiteSpace|WhiteSpace|

Ponadto metoda „Trim()” usunie wszystkie spacje, nawet te wewnątrz tekstu. Bardzo prosto sprowadza się tekst do małych liter i dużych:

            Console.WriteLine("PiOtReK".ToLower());//zamienia litery na małe
            Console.WriteLine("PiOtReK".ToUpper());//zamienia litery na duże

            //Wyświetli:
            //piotrek
            //PIOTREK

Tekst można uciąć, zarówno z lewej jak i z prawej strony, można również wyciąć kawałek ze środka. Położenie znaków w tekście numerowane jest od 0:

Tak więc, jeśli chcielibyśmy usunąć literę „e” to nie znajduje się ona na pozycji szóstej a na pozycji piątej. Przykład wycinania tekstu:

            int x = "PiOtReK".Length; //pobieramy długość tekstu
            Console.WriteLine("PiOtReK".Substring(0,3));//zwróci pierwsze trzy litery
            Console.WriteLine("PiOtReK".Substring(x-3, 3));//zwróci ostatnie trzy litery
            Console.WriteLine("PiOtReK".Substring(3));//zwróci litery wycięte po literze na pozycji 4

            //Wyświetli:
            //PiO
            //ReK
            //tReK

Jeśli chcielibyśmy wydobyć literę z konkretnej pozycji w tekście, wystarczy wpisać jej indeks w nawiasie kwadratowym []. Jeśli chcielibyśmy pobrać literę „e” ze słowa „Piotrek”, wyglądałoby to następująco:

            string x = "Piotrek";
            char z = x[5];
            //lub
            char y = "Piotrek"[5];

            Console.WriteLine(x[5]); //wyświetli literę: e
            Console.WriteLine("Piotrek"[5]); //wyświetli literę: e

Elementy tekstu można zamieniać, zarówno grupy znaków, jak i pojedyncze znaki, używamy w tym celu metody „Replace” i wskazujemy, jaki element ma być zamieniony na jaki:

            Console.WriteLine("Marlenka".Replace("a","x")); //Mxrlenkx
            Console.WriteLine("Marlenka".Replace("Ma", "x")); //xrlenkx
            Console.WriteLine("Marlenka".Replace("a", "xxx")); //Mxxxrlenkxxx

Metoda „Compare” sprawdzi czy tekst jest taki sam, jeśli tak jest zwróci true jeśli nie, zwróci false:

            Console.WriteLine(string.Compare("prawda", "prawda")); //Zwróci 0
            Console.WriteLine(string.Compare("prawda", "falsz")); //Zwróci 1
            Console.WriteLine(Convert.ToBoolean(string.Compare("prawda", "prawda"))); //Zwróci false
            Console.WriteLine(Convert.ToBoolean(string.Compare("prawda", "falsz"))); //Zwróci true

Ogólnie tego typu działania, przydadzą się nam później podczas wykonywania pętli lub sprawdzania warunku instrukcji. Metoda Contains prowadzi czy wyrażenie znajduje się w naszej zmiennej, może to być długi, krótki tekst lub pojedyncza litera.

            Console.WriteLine(Convert.ToBoolean("prawda".Contains("sz"))); //Zwróci false
            Console.WriteLine(Convert.ToBoolean("prawda".Contains("da"))); //Zwróci true

Metoda Replece pozwoli na zamianę wybranego znaku lub ciągu znaków na inny zdefiniowany przez użytkownika:

            Console.WriteLine("prawda".Replace('a','b')); //Zwróci prbwdb
            Console.WriteLine("prawda".Replace("prawda", "fałsz")); //Zwróci fałsz
            Console.WriteLine("prawda".Replace("prawda", "fałsz").Replace('a', 'b')); //Zwróci fbłsz

Używając metody Rmove, usuniemy z ciągu wybrany element lub elementy. Wstawimy je, używając metody Insert:

            Console.WriteLine("abc---def");
            Console.WriteLine( "abc---def".Remove(3));//zostawi tylko trzy pierwsze litery
            Console.WriteLine( "abc---def".Remove(3, 3));//usunie trzy znaki zaczynając od pozycji 3

            Console.WriteLine("abc---def".Remove(3).Insert(3,"+++ghi"));//doda znaki na pozycji 3
            Console.WriteLine("abc".Insert("abc".Length, "+++jkl"));   //doda znaki na końcu tekstu
            Console.WriteLine("abc---def".Remove(3, 3).Insert(3, "+++"));//wstawi znaki wewnątrz tekstu
            //Wyświetli:
            //abc---def
            //abc
            //abcdef
            //abc+++ghi
            //abc+++jkl
            //abc+++def

Metoda Split pozwoli na podział naszego tekstu w określony sposób i stworzenie z niego tablicy, wyodrębnienie słów, zliczanie ich itp.

            String[] substrings = "To jest tekst ze spacjami.".Split(' ');
            foreach (var substring in substrings)
                Console.WriteLine(substring);
            //Wyświetli
            //To
            //jest
            //tekst
            //ze
            //spacjami.

To są podstawowe metody, które mogą okazać się bardzo użyteczne podczas tworzenia programów na dalszym etapie kursu.


  1. Ktoś popełnił błąd w tekście „Ananas, andnas, ananas dla nas.”, używając metody Remove i Insert popraw tekst.

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/c/formatowanie-tekstu/