Swoboda wyboru
Uruchamiając w komputerze programy, otrzymujesz wyniki ich działań. W zależności od uzyskanych rezultatów odpowiednio reagujesz. Za pomocą skryptów możesz zautomatyzować te zdarzenia. Wbuduj w skrypt odrobinę inteligencji.
Skrypt musi „wiedzieć”, jak zareagować w przypadku wystąpienia określonego zdarzenia, a jak – gdy w wyniku podobnej sytuacji program czy system wygeneruje inny wynik. Do dyspozycji masz trzy bardzo przydatne, wręcz niezbędne w każdym niemal skrypcie, narzędzia – konstrukcje: If…Then, If…Then…Else, If…Then…Elself, Select Case. Oprócz tego poznasz nowy element – wewnętrzne stałe Visual Basic Script. Kiedy używać danej konstrukcji i dlaczego? Oczywiście zgodnie z metodyką naszego kursu najlepszym wyjaśnieniem poszczególnych konstrukcji będą przykłady.
Konstrukcje warunkowe w skryptach Visual Basic Script
Konstrukcje warunkowe w skryptach Visual Basic Script
Warunek If…Then
Konstrukcja If…Then to jedna z fundamentalnych konstrukcji w każdym języku programowania. Zasada jej działania jest prosta. Jeżeli (If) nastąpi jakieś zdarzenie, to (then) wykona daną akcję. I tyle. Nic więcej, nic mniej. A jak wyglądałoby to w skrypcie? Oto składnia If…Then.
Krok 1
W Visual Basic Script wprowadzanie konstrukcji If…Then wymaga ściśle określonej składni. Przyjrzyj się dwóm przykładom:
Krok 2
Pierwszy przypadek wygeneruje błąd. Drugi wyświetli wartość 3 (czyli wartość stałej z, spełniającej warunek zawarty w konstrukcji If…Then). Z pewnością widzisz różnice między dwoma pokazanymi fragmentami kodu. Pozwala to sformułować następujące zasady składni:
- Słowa kluczowe konstrukcji, czyli If oraz Then muszą się znajdować w tej samej linii kodu.
- Akcja, jaka ma być wykonana w razie spełnienia warunku zawartego w konstrukcji, musi być wpisana w kolejnej linii.
- Całą konstrukcję If…Then kończysz wyrażeniem End If.
Krok 3
Brak któregoś z powyższych elementów spowoduje wystąpienie błędu w razie wykonania skryptu. Wiesz już zatem, jakie zasady składni obowiązują dla konstrukcji If…Then (z pozostałymi konstrukcjami przedstawionymi w bieżącym odcinku jest podobnie, o czym przekonasz się w dalszej lekturze).
Krok 4
Rodzi się jednak pytanie, jaki jest wynik działania konstrukcji If…Then w momencie, kiedy oczekiwany warunek nie nastąpił, czyli w sytuacji, gdy posługując się powyższym fragmentem, suma stałych x i y nie daje w wyniku z. Odpowiedź jest prosta – akcja, która ma być wykonana w razie spełnienia warunku, będzie w takiej sytuacji pominięta, a skrypt będzie kontynuował działanie od pierwszej linii po wystąpieniu wyrażenia End If.
Warunek IF...Then...ElseIf
Kolejna konstrukcja warunkowa wprowadza nieco elastyczności do skryptu. Za pomocą If...Then...ElseIf możesz sprawdzać dowolną liczbę warunków i w zależności od tego, który z przewidzianych warunków jest spełniony, uruchomić daną akcję. Jednak w praktyce konstrukcja ta przydaje się do sprawdzenia najwyżej dwóch, trzech warunków. Przy większej ich liczbie lepiej zastosować opisaną w dalszej części konstrukcję Select Case, w przeciwnym razie kod skryptu stanie się przesadnie długi i niezbyt czytelny.
Krok 1
W przykładzie pokazujemy schematyczne zastosowanie konstrukcji If...Then...ElseIf:
Krok 2
Zwróć uwagę na pojawiające się wyżej wyrażenie Else. Pozwala ono wbudować w skrypt polecenie lub akcję, jaka ma być wykonana w sytuacji, gdy żaden z warunków ujętych w konstrukcji If…Then…ElseIf nie będzie spełniony. Całość kończysz znanym ci już wyrażeniem End If. Po nim następują kolejne linie kodu skryptu.
Warunek If...Then...Else
Wcześniej poznałeś już wyrażenie Else. Wiesz już zatem, co ono oznacza i jaką ma funkcję w skrypcie i w konstrukcji warunkowej. Warto, byś wiedział, że możesz stosować uproszczone konstrukcje warunkowe, uwzględniające tylko wykonanie akcji, gdy warunek jest spełniony (czyli to samo co w If...Then) oraz wykonanie alternatywnej akcji, gdy warunek nie jest spełniony.
Krok 1
Schematycznie można to przedstawić w następujący sposób:
Krok 2
To najczęściej stosowana konstrukcja warunkowa.
Konstrukcja Select Case
W sytuacji gdy w skrypcie chcesz kontrolować wiele warunków i przyporządkowywać tym warunkom różne akcje, możesz to oczywiście zrobić za pomocą znanej ci już konstrukcji If…Then…ElseIf, ale dużo bardziej eleganckim rozwiązaniem jest skorzystanie z bardzo efektywnej, a przy tym stosunkowo mało znanej konstrukcji Select Case.
Krok 1
Schematycznie działanie tej konstrukcji można przedstawić następująco:
Krok 2
Konstrukcję tę będziemy stosować szerzej w kolejnych odcinkach naszego kursu. Teraz proponujemy, byś przyjrzał się przykładowemu skryptowi, bazującemy na wcześniej przedstawionych konstrukcjach warunkowych If...Then...
Przykładowy skrypt – If...Then
Jako przykład zastosowania poznanych konstrukcji warunkowych proponujemy skrypt, który automatycznie wyszuka linie komentarzy w pliku wsadowym (plik z rozszerzeniem .bat), a następnie zapisze je do odrębnego pliku tekstowego. Dla przypomnienia, linie komentarzy w plikach wsadowych oznaczane są wyrażeniem REM. Skrypt wyszuka takie wyrażenie w pliku, a następnie zapisze linię do wyniku.
Krok 1
Uruchom program Notepad++ 4.22 i wpisz lub wczytaj z krążka plik skrypt-odc4.vbs.
Krok 2
Sekcja nagłówka znajdująca się w liniach od 1 do 10 to znane ci już wyrażenia Option Explicit (wymuszenie deklarowania zmiennych), dwie deklaracje stałych (wyrażenie Const) oraz deklaracje zmiennych (Dim).
Krok 3
Od linii 10 rozpoczyna się sekcja referencyjna, w której zadeklarowanym zmiennym przypisujesz odpowiednie wartości, a także tworzysz niezbędne obiekty. Zwróć uwagę na ścieżki do plików w liniach 11 i 12. Zmodyfikuj je odpowiednio do własnych potrzeb.
Krok 4
W linii 13 tworzysz obiekt systemu plików, który umożliwi otwieranie plików i wykonywanie na nich działań. Linia 14 to utworzenie obiektu odpowiadającego odczytywanemu plikowi wsadowemu, natomiast linia 15 to obiekt, za którego pomocą powstanie plik wynikowy.
Krok 5
W linii 16 zaczyna się sekcja robocza – główny „silnik” skryptu. Jeżeli śledziłeś poprzednie odcinki naszego kursu, z pewnością rozpoznasz konstrukcję pętli Do…While. W tym przypadku pętla będzie wykonywana tak długo, dopóki skrypt, odczytując plik wsadowy, nie dotrze do jego końca.
Krok 6
Linie od 19 do 21 zawierają konstrukcję If…Then. Warunkiem uaktywniającym akcję zawartą w tej konstrukcji (a jest nią zapis linii komentarza do pliku wynikowego), jest fakt odnalezienia w danej linii wyrażenia REM. W jaki sposób skrypt odnajduje tę linię? Odpowiada za to wartość zmiennej intIsREM, której przypisana jest funkcja InStr (linia 18).
Krok 7
Zauważ, że po zapisaniu odnalezionej linii komentarza do pliku wynikowego i wyjściu z instrukcji warunkowej skrypt wraca do pętli i działanie się powtarza – tak długo, dopóki skrypt nie dotrze do końca odczytywanego pliku.
Krok 7
Zwróć uwagę na zawarty w linii 20 ciąg znaków: vbCrLf. To jedna z tzw. wewnętrznych stałych języka Visual Basic Script. Nie wymaga ona deklaracji w sekcji nagłówka, jest „zrozumiała” od razu przez interpreter VBS (w Windows jest to Windows Script Host). Co oznacza? Jest odpowiednikiem znaku powrotu karetki (czyli wciśnięcia klawisza [Enter]) oraz przejścia do nowej linii (Lf oznacza Line Feed).
Krok 8
W zasadzie na linii 22 można poprzestać, ale wtedy, po uruchomieniu skryptu, nie wiedziałbyś, kiedy zakończył on swoją pracę. Dlatego w linii 23 za pomocą obiektu WScript i metody Echo wprowadzono polecenie wyświetlenia odpowiedniego komunikatu – ostatnie dwie linie zamykają pliki, na których skrypt pracował.