Odczytywanie danych z pliku - Znajdowanie błędów
Tworzenie wyrażeń łańcuchowych | Przydatne funkcje
Wyrażenia łańcuchowe
>Tworzenie wyrażeń łańcuchowych
Visual Basic ma operator przeznaczony do wykonywania działań na łańcuchach znaków. Pozwala on na sklejanie czyli konkatencję dwóch łańchuchów. Symbolem tego operatora jest znak ampersand czyli &. W wyniku działania konkatencji dwóch łańcuchów drugi łańcuch jest doklejany na końcu pierwszego łańcucha, a wynikiem jest długi łańcuch zawierający dwa łańcuchy źródłowe.
Przykład 5
Utworzenie napisu zawierającego wprowadzone nazwisko.
Dim Nazw As String*20
W powyższym przykładzie zmienna Napis przyjmie wartość "Nazywam się James Bond".
Dim Napis As String
Nazw = "James Bond"
Napis = "Nazywam się " & Nazw
Oprócz operatora konkatencji &, w Visual Basicu zdefiniowanych jest kilka wbudowanych funkcji, które pozwalają wykonywać dodatkowe operacje na łańcuchach. Należą do nich:
- Len(s) - oblicza długość łańcucha s. Długość łańcucha określa ilość znaków z jakich składa się łańcuch wliczając w to wszystkie odstępy. Łańcuch pusty "" ma długość 0. Zatem Len("") równa się 0.
- Left(s, k) - zwraca k pierwszych znaków (czyli podłańcuch o długości k) z łańcucha s.
- Right(s, k) - zwraca k ostatnich znaków z łańcucha s.
- Mid(s, k, l) - zwraca podłańcuch łańcucha s o długości l
począwszy od k-tego znaku.
Uwaga: dozwolona jest również skrócona wersja funkcji Mid z dwoma tylko parametrami:
Mid(s, k) - zwraca podłańcuch łańcucha s począwszy od pozycji k.
Należy zwrócić uwagę, że funkcja Left(s,k) wykonuje tą samą operację co funkcja Mid(s,l,k). Zaś funkcja Right(s,k) jest równoważna funkcji Mid(s, Len(s)-k+1).
Przykład 6
Dim s As String
Dim s1, s2, s3 As String
s = "Programowanie w Visual Basic nie jest trudne"
s1 = Left(s, 7) 's1 przyjmie wartść "Program"
s2 = Right(s, 11) 's2 przyjmie wartość "jest trudne"
s3 = Mid(s, 17, 28) 's3 przyjmie wartość "Visual Basic"
>Przydatne funkcje
Inną bardzo przydatną funkcją w operacjach z łańcuchami jest znajdowanie określonego podłańcucha w danym łańcuchu. Do tego działania służy funkcja InStr. Podobnie jak funkcja Mid występuje ona w dwóch postaciach:
- InStr(s,s1) - znajduje pozycję w łańcuchu s, na której znajduje się pierwsze wystąpienie podłańcucha s1; jeśli podłańcuch s1 w ogóle nie występuje w s to InStr zwraca wartość 0.
- InStr(k,s,s1) - znajduje pozycję w łańcuchu s, na której znajduje się podłańcuch s1, przy czym przeszukiwanie rozpoczyna się od pozycji k.
Przykład 7
Dim s As String
Dim s1 As String
Dim p As Integer
s = "Programowanie w Visual Basic nie jest trudne"
p = InStr(s,"Visual") 'obliczona zostanie pozycja pierwszego
'wystąpienia podłańcucha "Visual", czyli p
'przyjmie wartość 17
s1 = Mid(s,p,12) 'na zmienną s1 podstawiony zostanie
'12-znakowy podłańcuch łańcucha s począwszy
'od pozycji p
Dwie inne użyteczne funkcje pozwalają za zmianę wszystkich znaków łańcucha na duże litery (funkcja UCase) lub na małe litery (funkcja LCase).
Przykład 8
Dim s, male, duze As String
s = "Nazywam się James Bond"
male = LCase(s) 'łańcuch male przyjmie wartość "nazywam się james bond"
duze = UCase(s) 'łańcuch duze przyjmie wartość "NAZYWAM SIĘ JAMES BOND"
Obok zmiany liter na duże lub male (UCase i LCase), często użyteczną funkcją przy porównywaniu łańcuchów jest funkcja Trim, która obcina początkowe spacje w łańcuchu. Pozwala to uniknąć "niewidzialnych" pomyłek przy porównaniach.
I ostatnie z istotnych funkcji operujących na łańcuchach, funkcje Val(s) oraz Str(k), które pozwalają na konwersję łańcuchów na liczby oraz odwrotnie, liczb na łańcuchy. Należy zwrócić uwagę, ze funkcja Val potrafi przekształcać tylko takie znaki łańcucha, które reprezentują liczby, a więc cyfry, kropki dziesiętne oraz znak minus. Jeśli w przekształcanym łańcuchu występują również inne znaki, np. litery, to funkcja Val przekształci łańcuch na liczbę pod warunkiem, że liczba znajduje się na początku łańcucha. W przeciwnym przypadku funkcja zwróci wartość 0.
Przykład 9
Dim liczba As single
liczba = Val("56.5")
'zmienna liczba przyjmie wartość 56.5
liczba = Val("3.5dolara")
'zmienna liczba przyjmie wartość 3.5
liczba = Val("dolarów 5")
'zmienna liczba przyjmie wartość 0
liczba = Val("napis")
'zmienna liczba przyjmie wartość 0
liczba = Val("siedem")
'zmienna liczba przyjmie wartość 0
liczba = Val("0")
'zmienna liczba przyjmie wartość 0
Konwersję w drugą stronę, tj. z liczb na łańcuchy umożliwia funkcja Str(liczba). Funkcja ta przekształca liczby rezerwując zawsze jednomiejsce na znak liczby. Dlatego też liczby dodatnie poprzedzone są spacją, a liczby ujemne zaczynają się od znaku minus.
Przykład 10
Dim s As String
s = Str(25.3) 'łańcuch s przyjmie wartość " 25.3"
s = Str(-34.5) 'łańcuch s przyjmie wartość "-34.5"
Uwaga: w wielu przypadkach Visual Basic dokonuje automatycznej konwersji tekstów na liczby i odwrtonie. Jest to w szególności prawdziwe w instrukcjach podstawiania, w których np. na zmienne tekstowe podstawiane są wartości liczbowe, lub na zmienne numeryczne podstawiane są łańcuchy zawierające liczby. Pewniejszym jednak sposobem uniknięcia niespodziewanych błędów jest konsekwentne przeprowadzenie konwersji i kontrolowana zmiana wartości numerycznych na tekstowe i odwrotnie.
Przykład 11
Dim s As String
Dim k As Integer
s = 36.6 'łańuch s przyjmie wartość " 36.6"
k = "15.5" 'łańcuch k przyjmie wartość 15.5
Ćwiczenie 4
Odczytać pierwszy wyraz wprowadzonego tekstu, obliczyć długość tego wyrazu i całego tekstu oraz sprawdzić, na której pozycji w tekście występuje pierwszy raz litera e.
- Zaprojektuj formularz, który umożliwi wprowadzenie tekstu, wykonanie sprawdzenia oraz zakończenia pracy. Może on mieć następującą postać:
- Zwróć uwagę, że aby w pole tekstowe można było wpisać tekst w wielu linijkach trzeba przy projektowaniu tego pola tekstowego stawić właściwość MultiNile na True
Procedury, które pobiorą tekst z pola tekstowego, txt_pole_Change(), zrealizują sprawdzanie tekstu btn_sprawdz_Click(), oraz pozwolą zakończyć działanie programu btn_koniec_Click() mogą mieć postać przytoczoną poniżej. Zwróćmy uwagę na deklarację zmiennej tekstowej t na początku programu. Będzie ona dostępna w całym programie (ale tylko w tym module, gdyż zadeklarowana jest deklaracją PRIVATE). Procedura btn_sprawdz_Click() wykorzystuje omówione wcześniej funkcje łancuchowe InStr, Left oraz Len. Aby wyprowadzić komunikat w oknie MsgBox w kilku wierszach (standardowo tekst ten stanowi jeden wiersz) porozdzielano poszczególne wiersze znakiem przejścia do nowego wiersza Chr(10). Uwaga: jeśli wiersz pisanego kodu jest długi, to kontynuację kodu w kolejnym wierszu zaznacza się znakiem podkreślenia umieszczonego na końcu wiersza.
Private t As String
'Procedura obsługująca kliknięcie przycisku btn_zakoncz
Private Sub btn_zakoncz_Click()
Unload Me
End Sub
'Procedura obsługująca kliknięcie przycisku btn_sprawdz
Private Sub btn_sprawdz_Click()
Dim dlug, dlug1, ie, k As Integer
Dim Pierwszy As String
'Sprawdza gdzie jest pierwsza spacja
k = InStr(t, " ")
'Wycina pierwszy wyraz
Pierwszy = Left(t, k - 1)
'Oblicza długość całego tekstu i pierwszego wyrazu
dlug = Len(t)
dlug1 = Len(Pierwszy)
'Wyznacza pozycję litery e
ie = InStr(t, "e")
'Wypisuje komunikat
MsgBox "Tekst zaczyna się od wyrazu: " & Pierwszy & Chr(10) & _
"który ma " & Str(dlug1) & " liter." & Chr(10) & _
"Cały tekst ma długość " & Str(dlug) & " znaków." & Chr(10) & _
"Litera e po raz pierwszy występuje na pozycji " & Str(ie)
End Sub
'Procedura obsługująca zmianę pola tekstowego txt_pole
Private Sub txt_pole_Change()
t = txt_pole.Text
End Sub