Skip to content

3. Podstawy programowania VBSCRIPT

Po omówieniu możliwych kontekstów wykonywania skryptu VBScript przechodzimy teraz do samego języka. W dalszej części artykułu zakładamy następujące warunki:

  1. kontenerem skryptu jest WSH
  2. skrypt znajduje się w pliku z rozszerzeniem .vbs

Aby przedstawić daną koncepcję, zazwyczaj postępujemy w następujący sposób:

  • w razie potrzeby wprowadzamy pojęcie
  • przedstawiamy program ilustrujący wraz z wynikami
  • w razie potrzeby komentujemy wyniki i program

Kontenery VBScript nie rozróżniają wielkości liter (wielkie/małe) w tekście skryptu. Można więc bez różnicy napisać wscript.echo „coucou” lub WSCRIPT.ECHO „coucou”.

Programy przedstawione poniżej wyświetlają na ekranie wiele informacji, dlatego ponownie omówimy metody zapisywania obiektu wscript.

3.1. Wyświetlanie informacji

Korzystaliśmy już z metody echo obiektu wscript, jednak obiekt ten posiada również inne metody umożliwiające wyświetlanie treści na ekranie, co pokazuje poniższy skrypt:

Program
Wyniki
1
2
3
4
un
deuxtrois
quatre
cinq

Należy zwrócić uwagę na następujące kwestie:

  • Każdy tekst umieszczony po apostrofie jest traktowany jako komentarz do skryptu i nie jest interpretowany przez metodę WSH (wiersz 1).
  • Metoda echo zapisuje swoje argumenty i przechodzi do następnego wiersza, podobnie jak metoda writeLine (wiersze 2 i 6)
  • metoda write zapisuje swoje argumenty i nie przechodzi do następnego wiersza (wiersz 3)
  • Znak końca linii jest reprezentowany przez sekwencję dwóch znaków o kodach ASCII 13 i 10. Zatem wiersz 4 jest reprezentowany przez wyrażenie chr(13) & chr(10), gdzie chr(i) oznacza znak o kodzie ASCII i, a & jest operatorem konkatenacji ciągów znaków. Tak więc „chat” & „eau” tworzy ciąg znaków „chateau”.
  • Znak końca linii można łatwiej przedstawić za pomocą stałej vbCRLF (wiersz 5)

3.2. E pisywanie instrukcji w skrypcie VBScript

Domyślnie w każdym wierszu zapisuje się jedną instrukcję. Można jednak zapisać kilka instrukcji w jednym wierszu, oddzielając je znakiem :, tak jak w inst1:inst2:inst3. Jeśli wiersz jest zbyt długi, można go podzielić na części. W takim przypadku poszczególne części instrukcji muszą kończyć się dwoma znakami (spacja)_. Wróćmy do poprzedniego przykładu, przepisując instrukcje w inny sposób:

Program
Wyniki
1
2
3
4
un
deuxtrois
quatre
cinq

3.3. Zapis za pomocą funkcji msgBox

Chociaż w niniejszym dokumencie do wyświetlania treści na ekranie używamy niemal wyłącznie obiektu wscript, istnieje bardziej zaawansowana funkcja służąca do wyświetlania informacji w oknie. Jest to funkcja msgbox, z której zazwyczaj korzysta się z trzema parametrami:

msgbox komunikat, ikony+przyciski, tytuł

  • message to tekst komunikatu, który ma zostać wyświetlony
  • ikony+przyciski (opcjonalne) to w rzeczywistości liczba określająca typ ikony oraz przyciski, które mają zostać umieszczone w oknie komunikatu. Liczba ta jest najczęściej sumą dwóch liczb: pierwsza określa ikonę, a druga przyciski
  • tytuł to tekst, który ma zostać umieszczony w pasku tytułu okna komunikatu

Wartości, których należy użyć do określenia ikony i przycisków w oknie komunikatu, są następujące:

Stała
Wartość
Opis
vbOKOnly
   0
Wyświetla wyłącznie przycisk OK.
vbOKCancel
   1
Wyświetla przyciski OK i Anuluj.
vbAbortRetryIgnore
   2
Wyświetla przyciski „Zrezygnuj”, „Spróbuj ponownie” i „Pomiń”.
vbYesNoCancel
   3
Wyświetla przyciski „Tak”, „Nie” i „Anuluj”.
vbYesNo
   4
Wyświetla przyciski „Tak” i „Nie”.
vbRetryCancel
   5
Wyświetla przyciski „Spróbuj ponownie” i „Anuluj”.
vbCritical
16
Wyświetla ikonę „Komunikat krytyczny”.
vbQuestion
32
Wyświetla ikonę „Prośba o ostrzeżenie”.
vbExclamation
48
Wyświetla ikonę „Komunikat ostrzegawczy”.
vbInformation
64
Wyświetla ikonę komunikatu informacyjnego.
vbDefaultButton1
   0
Pierwszy przycisk jest przyciskiem domyślnym.
vbDefaultButton2
256
Drugi przycisk jest przyciskiem domyślnym.
vbDefaultButton3
512
Trzeci przycisk jest przyciskiem domyślnym.
vbDefaultButton4
768
Czwarty przycisk jest przyciskiem domyślnym.
vbApplicationModal
   0
Aplikacja modalna; użytkownik musi odpowiedzieć na komunikat, zanim będzie mógł kontynuować pracę w bieżącej aplikacji.
vbSystemModal
4096
System modalny; wszystkie aplikacje są zawieszone do momentu, aż użytkownik odpowie na komunikat.

Oto przykłady:

Program
Wyniki
  
   
   

W niektórych przypadkach wyświetlane jest okno informacyjne, które pełni również funkcję okna wprowadzania danych. Jeśli zadajemy pytanie, chcemy na przykład dowiedzieć się, czy użytkownik kliknął przycisk oui, czy przycisk non. Funkcja msgBox zwraca wynik, którego w poprzednim programie nie wykorzystaliśmy. Wynik ten jest liczbą całkowitą reprezentującą przycisk użyty przez użytkownika do zamknięcia okna wyświetlania:

Stała
Wartość
Wybrany przycisk
vbOK
1
OK
vbCancel
2
Anuluj
vbAbort
3
Rezygnacja
vbRetry
4
Spróbuj ponownie
vbIgnore
5
Pomiń
vbYes
6
Tak
vbNo
7
Nie

Poniższy program pokazuje wykorzystanie wyniku funkcji msgBox. Czterokrotnie wyświetlane jest okno z przyciskami „tak”, „nie” i „anuluj”. Odpowiada się w następujący sposób:

  1. klika się „tak”
  2. klikamy „Nie”
  3. klikamy „Anuluj”
  4. zamykamy okno bez użycia żadnego przycisku. Program pokazuje, że jest to równoznaczne z użyciem przycisku „Anuluj”.
Program
Wyniki

3.4. uje dane, które można wykorzystać w VBScript

VBscript rozpoznaje tylko jeden typ danych: wariant. Wartością typu variant może być liczba (4, 10,2), ciąg znaków („cześć”), wartość logiczna (true/false), data (#01/01/2002#), adres obiektu lub zbiór wszystkich tych danych umieszczonych w strukturze zwanej tablicą.

Przyjrzyjmy się poniższemu programowi i jego wynikom:

Program
Wyniki
4
i=4
10,2
r1=10,2
0,014
r2=0,014
c1=bonjour
01/10/02
d1=01/10/02
10/01/02
d2=10/01/02
-1
b1=Vrai
0
b2=Faux
v=4
v=10,2
v=bonjour
v=01/10/02
v=Vrai

Uwagi:

  • wiele języków programowania (C, C++, Pascal, Java, C# itp.) wymaga uprzedniego zadeklarowania zmiennej przed jej użyciem. Deklaracja ta polega na podaniu nazwy zmiennej oraz typu danych, które może ona zawierać (liczba całkowita, liczba rzeczywista, ciąg znaków, data, wartość logiczna itp.). Deklaracja zmiennych pozwala na:
    • ustalenie ilości pamięci potrzebnej dla zmiennej, jeśli różne typy danych wymagają różnej ilości pamięci
    • sprawdzenie spójności programu. Jeśli więc i jest liczbą całkowitą, a c ciągiem znaków, to pomnożenie i przez c nie ma sensu. Jeśli typ zmiennych i i c został zadeklarowany przez programistę, program odpowiedzialny za analizę kodu przed jego uruchomieniem może zgłosić taką niespójność.

Podobnie jak większość języków skryptowych o jednym typie danych (Perl, Python, JavaScript itp.), VBScript pozwala na nie deklarowanie zmiennych. Tak właśnie postąpiono w powyższym przykładzie.

  • Zwróćmy uwagę na składnię różnych wartości
    • 10,2 w wierszu 10 (kropka dziesiętna zamiast przecinka). Należy zauważyć, że na ekranie wyświetlana jest wartość 10,2.
    • 1.4e-2 w wierszu 13 (notacja naukowa). Na ekranie wyświetlono liczbę 0,014
    • [#01/10/2002#] (wiersz 26) do przedstawienia daty 10 stycznia 2002 r. VBScript używa więc formatu #mm/dd/rrrr# do przedstawienia daty jj z miesiąca mm roku aaaa
    • wartości logiczne true i false (prawda/fałsz) w wierszach 31 i 34. Te dwie wartości są reprezentowane odpowiednio przez liczby całkowite -1 i 0, jak pokazuje wyświetlenie w wierszach 32 i 35. Gdy wartość logiczna jest łączona z ciągiem znaków, wartości te stają się odpowiednio ciągami „Vrai” i „Faux”, jak pokazują wiersze 33 i 36. Warto przy okazji zauważyć, że operator łączenia & może służyć do łączenia nie tylko ciągów znaków.
  • Ponieważ zmienna v nie ma przypisanego typu, może ona kolejno przyjmować wartości różnych typów.

3.5. L y podtypów typu variant

Oto, co mówi oficjalna dokumentacja na temat różnych typów danych, które może zawierać typ variant:

Oprócz prostego rozróżnienia między liczbą a ciągiem znaków, typ Variant może rozróżniać różne rodzaje informacji numerycznych. Na przykład niektóre informacje numeryczne reprezentują datę lub godzinę. Gdy informacje te są używane wraz z innymi danymi dotyczącymi daty lub godziny, wynik jest zawsze wyrażany w postaci daty lub godziny. Dostępne są również inne rodzaje informacji numerycznych, od wartości logicznych po duże liczby zmiennoprzecinkowe. Te różne kategorie informacji, które mogą być zawarte w typie Variant, stanowią podtypy. W większości przypadków wystarczy po prostu umieścić dane w typie Variant, a ten zachowa się w sposób najbardziej odpowiedni dla tych danych.

Poniższa tabela przedstawia różne podtypy, które mogą być zawarte w typie Variant.

Podtyp
Opis
Empty
Variant nie jest zainicjowany. Jego wartość wynosi zero dla zmiennych liczbowych oraz ciąg znaków o zerowej długości („”) dla zmiennych typu ciąg znaków.
Null
Wariant celowo zawiera nieprawidłowe dane.
Boolean
Zawiera wartość True (prawda) lub False (fałsz).
Bajt
Zawiera liczbę całkowitą z zakresu od 0 do 255.
Integer
Zawiera liczbę całkowitą z zakresu od -32 768 do 32 767.
Waluta
Od -922 337 203 685 477,5808 do 922 337 203 685 477,5807.
Long
Zawiera liczbę całkowitą z przedziału od -2 147 483 648 do 2 147 483 647.
Single
Zawiera liczbę zmiennoprzecinkową o precyzji pojedynczej w zakresie od -3,402823E38 do -1,401298E-45 dla wartości ujemnych; od 1,401298E-45 do 3,402823E38 dla wartości dodatnich.
Podwójna
Zawiera liczbę zmiennoprzecinkową o podwójnej precyzji w zakresie od -1,79769313486232E308 do -4,94065645841247E-324 dla wartości ujemnych; od 4,94065645841247E-324 do 1,79769313486232E308 dla wartości dodatnich.
Data (czas)
Zawiera liczbę reprezentującą datę z przedziału od 1 stycznia 100 r. do 31 grudnia 9999 r.
Ciąg znaków
Zawiera ciąg znaków o zmiennej długości, ograniczony do około 2 miliardów znaków.
Obiekt
Zawiera obiekt.
Error
Zawiera numer błędu.

3.6. C ustalenie dokładnego typu danych zawartych w wariancie

Zmienna typu variant może zawierać dane różnych typów. Czasami musimy znać dokładny charakter tych danych. Jeśli w programie wpisujemy produit=nombre1*nombre2, zakładamy, że nombre1 i nombre2 to dwie wartości liczbowe. Czasami nie mamy co do tego pewności, ponieważ wartości te mogą pochodzić z wprowadzania z klawiatury, z pliku lub z dowolnego źródła zewnętrznego. Musimy zatem sprawdzić rodzaj danych umieszczonych w zmiennych nombre1 i nombre2. Funkcja typename(var) pozwala nam określić typ danych zawartych w zmiennej var. Oto kilka przykładów:

Program
Wyniki
var=1,type=Integer
var=deux,type=String
var=Vrai,type=Boolean
var=4,5,type=Double
var=11/10/01,type=Date

Inną możliwą funkcją jest vartype(var), która zwraca liczbę reprezentującą typ danych zawartych w zmiennej var:

Stała
Wartość
Opis
vbEmpty
0
Puste (niezainicjowane)
vbNull
1
Null (brak prawidłowych danych)
vbInteger
2
Liczba całkowita
vbLong
3
Liczba całkowita długa
vbSingle
4
Liczba zmiennoprzecinkowa o pojedynczej precyzji
vbDouble
5
Liczba zmiennoprzecinkowa o podwójnej precyzji
vbCurrency
6
Waluta
vbDate
7
Data
vbString
8
Kanał
vbObject
9
Obiekt automatyki
vbError
10
Błąd
vbBoolean
11
Wartość logiczna
vbVariant
12
Wariant (używany wyłącznie z tablicami wariantów)
vbDataObject
13
Obiekt niebędący elementem automatyzacji
vbByte
17
Bajt
vbArray
8192
Tabela

Uwaga: Stałe te są określone przez VBScript. W związku z tym nazwy te można wykorzystać w dowolnym miejscu kodu zamiast rzeczywistych wartości.

Powyższe informacje pochodzą z dokumentacji funkcji VBscript. Dokumentacja ta jest czasami niepoprawna, prawdopodobnie z powodu skopiowania i wklejenia treści z dokumentacji funkcji VB. Funkcja vartype z modułu VBScript realizuje jedynie część funkcji opisanych powyżej.

Poprzedni program, przepisany dla vartype, daje następujące wyniki:

Program
Wyniki
var=1,type=2
var=deux,type=8
var=Vrai,type=11
var=4,5,type=5
var=11/10/01,type=7

3.7. D eklarowanie zmiennych używanych przez skrypt

Wspomnieliśmy, że deklarowanie zmiennych używanych przez skrypt nie jest obowiązkowe. W takim przypadku, jeśli napiszemy:


1) somme=4
...
2) somme=smme+10

W przypadku literówki „smme” zamiast „somme” w instrukcji nr 2, VBScript nie zgłosi żadnego błędu. Zakłada on, że „smme” jest nową zmienną. Utworzy ją i w kontekście instrukcji nr 2 wykorzysta, inicjując jej wartość na 0.

Tego rodzaju błędy mogą być bardzo trudne do wykrycia. Dlatego zaleca się wymuszenie deklaracji zmiennych za pomocą dyrektywy „option explicit” umieszczonej na początku skryptu. Następnie każda zmienna musi zostać zadeklarowana za pomocą instrukcji „dim” przed jej pierwszym użyciem:


option explicit
...
dim somme
1) somme=4
...
2) somme=smme+10

W tym przykładzie VBScript zgłosi, że istnieje niezadeklarowana zmienna, podobnie jak w punkcie 2), co pokazuje poniższy przykład:

Program
Wyniki
dim1.vbs(9, 1) Erreur d'exécution Microsoft
 VBScript: Variable non définie: 'smme'

Chociaż w krótkich przykładach zawartych w niniejszym dokumencie zmienne w większości przypadków nie są deklarowane, będziemy wymuszać ich deklarację, gdy tylko zaczniemy pisać pierwsze znaczące skrypty. Dyrektywa Option explicit będzie wówczas stosowana systematycznie.

3.8. Funkcje konwersji w języku

VBScript przekształca dane wariantów na ciągi znaków, liczby, wartości logiczne itp. w zależności od kontekstu. W większości przypadków działa to dobrze, ale czasami może to powodować pewne niespodzianki, co zobaczymy później. W takiej sytuacji możemy chcieć „wymusić” typ danych wariantu. VBscript posiada funkcje konwersji, które przekształcają wyrażenie na różne typy danych. Oto kilka z nich:

Cint (wyrażenie)
przekształca wyrażenie na liczbę całkowitą typu short (integer)
Clng (wyrażenie)
przekształca wyrażenie w liczbę całkowitą długą (long)
Cdbl (wyrażenie)
przekształca wyrażenie w liczbę zmiennoprzecinkową typu double (double)
Csng (wyrażenie)
przekształca wyrażenie w liczbę rzeczywistą typu single (single)
Ccur (wyrażenie)
przekształca wyrażenie na wartość walutową (currency)

Oto kilka przykładów:

Program
Wyniki
var=4,code type=8,nom type=String
var=4,code type=2,nom type=Integer
var=1000000,code type=8,nom type=String
var=1000000,code type=3,nom type=Long
var=3,4e-5,code type=8,nom type=String
var=0,000034,code type=5,nom type=Double
var=3,4e-5,code type=8,nom type=String
var=0,000034,code type=4,nom type=Single
var=1000,45,code type=8,nom type=String
var=1000,45,code type=6,nom type=Currency
var=14,code type=2,nom type=Integer
var=14,code type=8,nom type=String
var=1000,45,code type=5,nom type=Double
var=1000,code type=2,nom type=Integer
var=1000,75,code type=5,nom type=Double
var=1001,code type=2,nom type=Integer

3.9. owanie danych wpisanych z klawiatury

Obiekt wscript umożliwia skryptowi pobieranie danych wprowadzonych z klawiatury. Metoda wscript.stdin.readLine pozwala odczytać wiersz tekstu wpisanego z klawiatury i zatwierdzonego klawiszem „Enter”. Odczytany wiersz można przypisać do zmiennej.

Program
Wyniki

Tapez votre nom : st
Bonjour st

Komentarze:

  • W kolumnie wyników, w wierszu [Tapez votre nom : st], st to wiersz wpisany przez użytkownika.

Jeśli tekst wpisany z klawiatury stanowi liczbę, jest on mimo to traktowany przede wszystkim jako ciąg znaków, jak pokazuje poniższy przykład:

Program
Wyniki
Tapez un nombre : 14
nombre lu=14,type=String

Jeśli liczba ta pojawia się w operacji arytmetycznej, VBscript automatycznie przekształci ciąg znaków na liczbę, ale nie zawsze. Spójrzmy na poniższy przykład:

Program
Wyniki
1
2
3
4
5
6
nombre1 : 3
nombre2 : 4
3+4=34
3-4=-1
3x4=12
3/4=0,75

W wynikach widać, że wiersz 8 skryptu nie przebiegł zgodnie z oczekiwaniami, ponieważ (niestety) w VBScript operator + ma dwa znaczenia: dodawanie dwóch liczb lub konkatenację dwóch ciągów znaków (oba ciągi są łączone ze sobą). Wcześniej widzieliśmy, że liczby wpisywane z klawiatury są odczytywane jako ciągi znaków, a VBScript przekształca je w liczby w zależności od potrzeb. Zrobił to poprawnie w przypadku operacji -, *, /, które mogą obejmować wyłącznie liczby, ale nie w przypadku operatora +, który może również obejmować ciągi znaków. W tym przypadku program założył, że chcemy wykonać konkatenację ciągów znaków.

Prostym rozwiązaniem tego problemu jest przekształcenie ciągów znaków na liczby już w momencie ich odczytu, jak pokazuje poniższa poprawiona wersja poprzedniego programu:

Program
Wyniki
nombre1 : 3
nombre1=3,type=String
nombre1=3,type=Long
nombre2 : 4
nombre2=4,type=String
nombre2=4,type=Long
3+4=7
3-4=-1
3x4=12
3/4=0,75

3.10. S prowadzanie danych za pomocą funkcji inputbox

Czasami może zaistnieć potrzeba wprowadzania danych za pomocą interfejsu graficznego zamiast klawiatury. W takim przypadku stosuje się funkcję inputBox. Funkcja ta przyjmuje wiele parametrów, z których najczęściej używane są tylko dwa pierwsze:

reponse=inputBox(message,title)

  • wiadomość: pytanie, które zadajesz użytkownikowi
  • tytuł (opcjonalnie): tytuł nadany oknu wprowadzania danych
  • odpowiedź: tekst wpisany przez użytkownika. Jeśli użytkownik zamknął okno bez udzielenia odpowiedzi, odpowiedź jest ciągiem pustym.

Oto przykład, w którym pytamy o imię i wiek osoby. W przypadku imienia podajemy informację i wybieramy opcję „OK”. W przypadku wieku również podajemy informację, ale wybieramy opcję „Anuluj”.

Program
Wyniki

3.11. U sługiwanie się obiektami strukturalnymi

Za pomocą języka VBScript można tworzyć obiekty posiadające metody i właściwości. Aby nie komplikować sprawy, przedstawimy tutaj obiekt posiadający właściwości, ale bez metod. Rozważmy osobę. Ma ona wiele właściwości, które ją charakteryzują: wzrost, wagę, kolor skóry, oczu, włosów... Wyróżnimy tylko dwie: imię i wiek. Zanim będziemy mogli korzystać z obiektów, musimy stworzyć szablon, który pozwoli je utworzyć. W języku VBScript odbywa się to za pomocą klasy. Klasę personne można zdefiniować w następujący sposób:


class personne
    Dim nom,age
End class

To instrukcja [Dim nom,age] definiuje dwie właściwości klasy personne. Aby utworzyć egzemplarze (zwane instancjami) klasy personne, piszemy:

set personne1=new personne
set personne2=new personne

Dlaczego nie napisać

personne1=new personne
personne2=new personne

Ponieważ wariant nie może zawierać obiektu. Może zawierać jedynie jego adres. Po wpisaniu set osoba1=new osoba następuje następująca sekwencja zdarzeń:

  1. tworzony jest obiekt personne. Oznacza to, że przydzielana jest mu pamięć.
  2. adres tego obiektu personne jest przypisywany do zmiennej personne1

Otrzymujemy wówczas następujący schemat pamięci dla zmiennych personne1 i personne2:

W pewnym sensie można powiedzieć, że personne1 jest obiektem personne. Można zaakceptować to nieprecyzyjne sformułowanie, jeśli przypomnimy sobie, że personne1 jest w rzeczywistości adresem obiektu personne, a nie samym obiektem personne.

Powiedzieliśmy, że obiekt personne ma dwie właściwości: nom i age. Jak wykorzystać te właściwości? Poprzez notację objet.propriété, jak wyjaśniono nieco wyżej. Zatem

personne1.nom oznacza imię osoby 1, a personne1.age – jej wiek. Oto krótki program ilustrujący to zagadnienie:

Program
Wyniki
p1=(dupont,18)

Powyższy program można zmodyfikować w następujący sposób:

Program
Wyniki
nom=dupont
age=18

W tym przypadku zastosowaliśmy konstrukcję „with ... end with”, która pozwala na „wyodrębnienie” nazw obiektów w wyrażeniach. Konstrukcja „with p1 ... end with” w wierszach 9–12 oraz 15–18 pozwala następnie na użycie składni .nom zamiast p1.nom oraz .age zamiast p1.age. Pozwala to uprościć pisanie instrukcji, w których ta sama nazwa obiektu jest używana wielokrotnie.

3.12. Przypisanie wartości do zmiennej

Istnieją dwie instrukcje służące do przypisania wartości do zmiennej:

  1. zmienna=wyrażenie
  2. ustaw zmienną=wyrażenie

Forma 2 jest zarezerwowana dla wyrażeń, których wynikiem jest odwołanie do obiektu. W przypadku wszystkich innych typów wyrażeń należy stosować formę 1. Różnica między tymi dwiema formami jest następująca:

  • w instrukcji variable=expression zmienna otrzymuje wartość. Jeśli v1 i v2 to dwie zmienne, zapis v1=v2 przypisuje wartość v1 do v2. Mamy zatem powielenie wartości w dwóch różnych miejscach. Jeśli następnie wartość v2 zostanie zmieniona, wartość v1 pozostaje niezmieniona.
  • W instrukcji set variable=expression zmienna otrzymuje jako wartość adres obiektu. Jeśli v1 i v2 to dwie zmienne, a v2 jest adresem obiektu obj2, to wpisanie set v1=v2 przypisuje wartość v1 do v2, a więc adres obiektu obj2. Kiedy skrypt następnie operuje na v1 i v2, nie są to „wartości” v1 i v2, na których się operuje, ale obiekty, na które „wskazują” v1 i v2, a więc w tym przypadku ten sam obiekt. Mówi się, że v1 i v2 są dwoma odwołaniami do tego samego obiektu, a manipulowanie nim za pomocą v1 lub v2 nie ma żadnego znaczenia. Innymi słowy, zmiana obiektu, do którego odwołuje się v2, powoduje zmianę obiektu, do którego odwołuje się v1.

Oto przykład:

Program
Wyniki
i=4
j=4
i=4
j=5
p1.nom=dupont
p1.age=18
p1.nom=dupont
p1.age=19
p2.nom=dupont
p2.age=19

3.13. E waluać wyrażenia

Główne operatory służące do obliczania wyrażeń to:

Rodzaj operatorów
Operatory
Przykład
Arytmetyczne
+,-,*,/
 
 
mod
 
\
 
^
   
Porównanie
<, <=
>, >=
=,<>
a<>b jest prawdziwe, jeśli a różni się od b
a=b jest prawdziwe, jeśli a jest równe b
a i b mogą być zarówno liczbami, jak i ciągami znaków. W tym ostatnim przypadku ciąg1<ciąg2, jeśli w porządku alfabetycznym ciąg1 poprzedza ciąg2. Podczas porównywania ciągów znaków wielkie litery poprzedzają małe w porządku alfabetycznym.
 
is
   
Logika
and, or, not, xor
Wszystkie operandy są tutaj wartościami logicznymi.
bool1 or bool2 jest prawdziwe, jeśli bool1 lub bool2 jest prawdziwe
bool1 and bool2 jest prawdziwe, jeśli bool1 i bool2 są prawdziwe
not bool1 jest prawdziwe, jeśli bool1 jest fałszywe i odwrotnie
bool1 xor bool2 jest prawdziwe, jeśli tylko jedna z wartości logicznych bool1 lub bool2 jest prawdziwa
   
Koncatenacja
&, +
Nie zaleca się używania operatora + do łączenia dwóch ciągów znaków ze względu na możliwe pomylenie z dodawaniem dwóch liczb. Należy zatem używać wyłącznie operatora &.

3.14. C ntrolowanie przebiegu programu

3.14.1. E wykonanie czynności warunkowo

Instrukcja VBScript umożliwiająca wykonywanie czynności w zależności od wartości prawdziwej/fałszywej warunku jest następująca:


if expression then
    action-vrai-1
    action-vrai-2
    ..
else
    action-faux-1
    action-faux-2
    ...
end if
Najpierw oceniane jest wyrażenie expression. Wyrażenie to musi mieć wartość logiczną. Jeśli ma wartość prawdziwą, wykonywane są akcje z then, w przeciwnym razie – akcje z else, o ile istnieje.

Poniżej znajduje się program przedstawiający różne warianty konstrukcji if-then-else:

Program
Wyniki
1
2
3
4
5
3 est plus grand que 0
3 est plus grand que 2
i=4
4 est plus petit que 10
i=3

Komentarze:

  • W języku VBScript można zapisać instrukcję1:instrukcja2:...:instrukcjan zamiast pisać jedną instrukcję w każdym wierszu. Z tej możliwości skorzystano na przykład w wierszu 10.

3.14.2. E xekwowanie czynności w sposób powtarzalny

Pętla o znanej liczbie iteracji
for i=idébut to ifin step ipas
    actions
next
  1. Zmienna i nazywana jest tutaj zmienną pętli. Może ona nosić dowolną nazwę
  2. i przyjmuje wartość idebut
  3. wartość i jest porównywana z ifin. Jeśli i <= ifin, wykonywane są instrukcje znajdujące się pomiędzy for... next
  4. i jest zwiększane o wartość ipas (i = i + ipas)
  5. powraca się do poprzedniego kroku 3. Po wykonaniu skończonej liczby kroków wartość i przekroczy ifin. Wykonanie skryptu jest kontynuowane od instrukcji następującej po next
  6. jeśli przyrost ipas jest ujemny, warunek z kroku 3 ulega zmianie. Czynności z for...next są wykonywane tylko wtedy, gdy i >= ifin.
Z pętli for można wyjść w dowolnym momencie za pomocą instrukcji exit for.
Pętla o nieznanej liczbie iteracji
do while condition
    actions
loop
  1. wyrażenie warunkowe jest oceniane. Jeśli jest prawdziwe, wykonywane są działania z while...loop
  2. wykonane działania mogły zmienić wartość warunku. Powraca się do poprzedniego etapu 1.
  3. gdy wyrażenie warunkowe stanie się fałszywe, pętla zostaje zakończona
Z pętli do while można wyjść w dowolnym momencie za pomocą instrukcji exit do.

Poniższy program ilustruje te kwestie:

Program
Wyniki
i=0,tableau(i)=10,somme=10
i=1,tableau(i)=20,somme=30
i=2,tableau(i)=30,somme=60
i=3,tableau(i)=40,somme=100
i=0,tableau(i)=10,somme=10
i=1,tableau(i)=20,somme=30
i=2,tableau(i)=30,somme=60
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
i=11
i=1
i=2
i=3
i=4
i=5
i=6

Uwaga: Na etapie tworzenia programu często zdarza się, że program „zaciąga się” (c.a.d) i nigdy się nie zatrzymuje. Zazwyczaj program wykonuje pętlę, której warunku wyjścia nie da się zweryfikować, jak na przykład w poniższym przykładzie:


' pętla nieskończona
i=0
Do While 1=1
  i=i+1
  wscript.echo i
Loop

' kolejna z tej samej serii
i=0
Do While true
  i=i+1
  wscript.echo i
Loop

Jeśli uruchomimy powyższy program, pierwsza pętla nigdy nie zatrzyma się sama. Można wymusić jej zatrzymanie, wpisując na klawiaturze CTRL-C (trzeba jednocześnie przytrzymać klawisz CTRL i klawisz C).

3.14.3. Zakończenie wykonywania programu

Instrukcja wscript.quit n kończy wykonywanie programu, zwracając kod błędu równy n. W instrukcji DOS kod błędu można sprawdzić za pomocą instrukcji if ERRORLEVEL n, która zwraca wartość true, jeśli kod błędu zwrócony przez ostatnio wykonany program jest >=n. Rozważmy następujący program i jego wyniki:

  
début

Zaraz po wykonaniu programu wysyłamy trzy następujące polecenia DOS:

1
2
3
4
5
6
7
C:\>if ERRORLEVEL 5 echo 5

C:\>if ERRORLEVEL 4 echo 4
4

C: >if ERRORLEVEL 3 echo 3
3

Polecenie DOS 1 sprawdza, czy kod błędu zwrócony przez program jest >=5. Jeśli tak, wyświetla (echo) 5, w przeciwnym razie nic.

Polecenie DOS 3 sprawdza, czy kod błędu zwrócony przez program jest >=4. Jeśli tak, wyświetla 4, w przeciwnym razie nic.

Polecenie DOS 5 sprawdza, czy kod błędu zwrócony przez program jest >=3. Jeśli tak, wyświetla 3, w przeciwnym razie nic.

Na podstawie wyświetlonych wyników można wywnioskować, że kod błędu zwrócony przez program wynosił 4.

3.15. owanie tablic danych w wariancie

xml-ph-0000@deepl.internala tablic danych w wariancie Wariant T może zawierać listę wartości. Mówi się wówczas, że jest to tablica. Tablica T posiada różne właściwości:

  • Dostęp do elementu i tablicy T uzyskuje się za pomocą składni T(i), gdzie i jest liczbą całkowitą zwaną indeksem, z zakresu od 0 do n-1, jeśli T ma n elementów.
  • Indeks ostatniego elementu tablicy T można uzyskać za pomocą wyrażenia ubound(T). Liczba elementów tablicy T wynosi wówczas ubound(T)+1. Liczbę tę często nazywa się rozmiarem tablicy.
  • Zmienna typu T może zostać zainicjowana pustą tablicą za pomocą składni T=array() lub sekwencją elementów za pomocą składni T=array(element0, element1, ...., elementn)
  • Do już utworzonej tablicy T można dodawać elementy. W tym celu stosuje się instrukcję redim preserve T(N), gdzie N jest nowym indeksem ostatniego elementu tablicy T. Operacja ta nazywana jest zmianą rozmiaru (redim). Słowo kluczowe preserve oznacza, że podczas tej zmiany rozmiaru aktualna zawartość tablicy musi zostać zachowana. W przypadku braku tego słowa kluczowego tablica T jest redimensionowana i opróżniana z elementów.
  • Element T(i) tablicy T jest typu variant i może zatem zawierać dowolną wartość, a w szczególności tablicę. W tym przypadku zapis T(i)(j) oznacza element j tablicy T(i).

Te różne właściwości tablic ilustruje poniższy program:

Program
Wyniki
Le tableau t1 a 5 éléments
t1(0)=1
t1(1)=-4,5
t1(2)=deux
t1(3)=Vrai
t1(4)=10/01/02
t1=1:-4,5:deux:Vrai:10/01/02
t1(5)=10:20:30
t1(5)(1)=20
t1=1 ~ -4,5 ~ deux
t1=:::

Komentarze

  • W tym miejscu wykorzystano funkcję o nazwie join, która została nieco dokładniej wyjaśniona poniżej.

3.16. yzm zmiennych tablicowych

W języku VBScript istnieje inny sposób korzystania z tablicy – jest to użycie zmiennej tablicowej. W przeciwieństwie do zmiennych skalarnych, taka zmienna musi zostać zadeklarowana za pomocą instrukcji dim. Możliwe są różne deklaracje:

  • dim tablica(n) deklaruje statyczną tablicę o n+1 elementach, ponumerowanych od 0 do n. Tego typu tablicy nie można zmienić rozmiaru
  • dim tablica() deklaruje pustą tablicę dynamiczną. Aby można było z niej korzystać, należy zmienić jej rozmiar za pomocą instrukcji redim, tak samo jak w przypadku zmiennej typu variant zawierającej tablicę
  • dim tablica(n,m) deklaruje tablicę dwuwymiarową o wymiarach (n+1)*(m+1). Element (i,j) tablicy jest oznaczony jako tableau(i,j). Należy zwrócić uwagę na różnicę w stosunku do wariantu, w którym ten sam element byłby oznaczony jako tableau(i)(j).

Dlaczego istnieją dwa rodzaje tablic, które w gruncie rzeczy są do siebie bardzo podobne? Dokumentacja języka VBScript nie porusza tej kwestii ani nie wskazuje, czy jeden z nich jest wydajniejszy od drugiego. W dalszej części naszych przykładów będziemy korzystać niemal wyłącznie z tablicy w wariancie. Należy jednak pamiętać, że VBscript wywodzi się z języka Visual Basic, który zawiera typy danych (integer, double, boolean itp.). W takim przypadku, jeśli musimy na przykład użyć tablicy liczb rzeczywistych, zmienna typu tablica będzie wydajniejsza niż zmienna typu variant. W takim przypadku zadeklarujemy coś w rodzaju dim tablica(1000) as double, aby zadeklarować tablicę liczb rzeczywistych, lub po prostu dim tablica() as double, jeśli tablica jest dynamiczna.

Oto przykład ilustrujący wykorzystanie zmiennych tablicowych:

Program
Wyniki
Le tableau t1 a 5 éléments
t1(0)=1
t1(1)=-4,5
t1(2)=deux
t1(3)=Vrai
t1(4)=10/01/02
t1=1:-4,5:deux:Vrai:10/01/02
Le tableau t1 a 5 éléments
t2(0)=0
t2(1)(2)=30
t2=:::
t3(0,0)=0
t3(0,1)=1
t3(1,0)=10
t3(1,1)=11

3.17. L e funkcje split i join

Funkcje split i join umożliwiają przekształcenie ciągu znaków w tablicę i odwrotnie:

  • Jeśli T jest tablicą, a car ciągiem znaków, to join(T,car) jest ciągiem znaków utworzonym przez połączenie wszystkich elementów tablicy T, przy czym każdy element jest oddzielony od następnego ciągiem znaków car. Tak więc join(array(1,2,3),"abcd") da ciąg znaków "1abcd2abcd3"
  • Jeśli C jest ciągiem znaków złożonym z sekwencji pól oddzielonych ciągiem car, to funkcja split(C,car) zwraca tablicę, której elementami są poszczególne części ciągu C. Tak więc split("1abcd2abcd3", "abcd") zwróci tablicę (1,2,3)

Oto przykład:

Program
Wyniki

' konwersja tablicy na ciąg znaków i odwrotnie

' tablica → ciąg znaków
tableau=array("un",2,"trois")
chaine=join(tableau,",")
wscript.echo chaine

' ciąg znaków → tablica
tableau2=split(chaine,",")
For i=0 To ubound(tableau2)
  wscript.echo tableau2(i)
Next

un,2,trois
un
2
trois

3.18. Tablice

Dostęp do elementu tablicy T uzyskuje się, znając jego numer i. Można go wówczas zapisać w postaci T(i). Istnieją tablice, do których elementów uzyskuje się dostęp nie za pomocą numeru, ale za pomocą ciągu znaków. Typowym przykładem tego rodzaju tablicy jest słownik. Kiedy szukamy znaczenia słowa w „Larousse” lub „Le petit Robert”, uzyskujemy do niego dostęp za pomocą samego słowa. Słownik ten można przedstawić za pomocą tablicy o dwóch kolumnach:

słowo1
opis1
słowo2
opis2
słowo3
opis3
....
 

Można by wtedy zapisać coś takiego:

słownik("słowo1") = "opis1"

słownik("słowo2")="opis2"

...

Działa to podobnie jak tablica, z tą różnicą, że indeksami tablicy nie są liczby całkowite, lecz ciągi znaków. Tego typu tablicę nazywamy słownikiem (lub tablicą asocjacyjną, hashtable), a indeksy będące ciągami znaków – kluczami słownika (keys). Słowniki są niezwykle powszechnie stosowane w informatyce. Każdy z nas posiada kartę ubezpieczenia społecznego z nadrukowanym numerem. Numer ten jednoznacznie nas identyfikuje i zapewnia dostęp do informacji, które nas dotyczą. W modelu słownik("klucz")="informacje" „kluczem” byłby tutaj numer ubezpieczenia społecznego, a „informacjami” – wszystkie dane na nasz temat przechowywane w systemach informatycznych ubezpieczenia społecznego.

W systemie Windows dostępny jest obiekt ActiveX o nazwie „Scripting.Dictionary”, który umożliwia tworzenie słowników i zarządzanie nimi. Obiekt ActiveX to komponent oprogramowania udostępniający interfejs, z którego mogą korzystać programy napisane w różnych językach, o ile są one zgodne ze standardem korzystania z obiektów ActiveX. Obiekt Scripting.dictionary może być zatem wykorzystywany przez języki programowania systemu Windows: JavaScript, Perl, Python, C, C++, VB, VBA... a nie tylko przez VBScript.

1
Obiekt Scripting.Dictionary tworzy się za pomocą instrukcji
set dico=wscript.CreateObject("Scripting.Dictionary")
lub po prostu
set dico=CreateObject("Scripting.Dictionary")
CreateObject to metoda obiektu WScript umożliwiająca tworzenie instancji obiektów ActiveX. Wersja 2 pokazuje, że wscript może być obiektem domyślnym. Gdy nie można „przyporządkować” metody do żadnego obiektu, kontener WSH spróbuje przyporządkować ją do obiektu wscript.
2
Po utworzeniu słownika będziemy mogli dodawać do niego elementy za pomocą metody add:
dico.add „klucz”,wartość
utworzy nowy wpis w słowniku powiązany z kluczem „klucz”. Powiązaną wartością jest wariant zawierający dowolną dany.
3
Aby pobrać wartość powiązaną z danym kluczem, używamy metody item słownika:
var = dico.item("klucz")
lub set var=dico.item("klucz"), jeśli wartość powiązana z kluczem jest obiektem.
4
Zbiór wszystkich kluczy słownika można pobrać do tablicy typu variant za pomocą metody `keys`:
klucze = dico.keys
klucze to tablica, której elementy można przeglądać.
5
Zbiór wartości słownika można pobrać do tablicy zmiennej za pomocą metody `items`:
wartości = słownik.items
items to tablica, której elementy można przeglądać.
6
Istnienie klucza można sprawdzić za pomocą metody `exists`:
dico.exists("klucz") zwraca wartość prawdziwą, jeśli klucz „klucz” występuje w słowniku
7
Można usunąć wpis ze słownika (klucz+wartość) za pomocą metody remove:
dico.remove("klucz") usuwa z słownika wpis powiązany z kluczem „klucz”. dico.removeall usuwa wszystkie klucze, a c.a.d opróżnia słownik.

Poniższy program wykorzystuje te różne możliwości:

Program

' tworzenie i użycie słownika
Set dico=CreateObject("Scripting.Dictionary")

' wypełnianie słownika
dico.add "clé1","valeur1"
dico.add "clé2","valeur2"
dico.add "clé3","valeur3"

' liczba elementów
wscript.echo "Le dictionnaire a " & dico.count & " éléments"

' lista kluczy
wscript.echo "liste des clés"
cles=dico.keys
For i=0 To ubound(cles)
  wscript.echo cles(i)
Next

' lista wartości
wscript.echo "liste des valeurs"
valeurs=dico.items
For i=0 To ubound(valeurs)
  wscript.echo valeurs(i)
Next

' lista kluczy i wartości
wscript.echo "liste des clés et valeurs"
cles=dico.keys
For i=0 To ubound(cles)
  wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i))
Next

' wyszukiwanie elementów
' klucz1
If dico.exists("clé1") Then
    wscript.echo "La clé clé1 existe dans le dictionnaire et la valeur associée est " & dico.item("clé1")
  Else
    wscript.echo "La clé clé1  n'existe pas dans le dictionnaire"
  End If
' klucz4  
If dico.exists("clé4") Then
    wscript.echo "La clé clé4 existe dans le dictionnaire et la valeur associée est " & dico.item("clé4")
  Else
    wscript.echo "La clé clé4  n'existe pas dans le dictionnaire"
  End If

' usuwamy klucz 1
dico.remove("clé1")

' lista kluczy i wartości
wscript.echo "liste des clés et valeurs après suppression de clé1"
cles=dico.keys
For i=0 To ubound(cles)
  wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i))
Next

' usuwamy wszystko
dico.removeall

' lista kluczy i wartości
wscript.echo "liste des clés et valeurs après suppression de tous les éléments"
cles=dico.keys
For i=0 To ubound(cles)
  wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i))
Next

' koniec
wscript.quit 0
Wyniki
Le dictionnaire a 3 éléments
liste des clés
clé1
clé2
clé3
liste des valeurs
valeur1
valeur2
valeur3
liste des clés et valeurs
dico(clé1)=valeur1
dico(clé2)=valeur2
dico(clé3)=valeur3
La clé clé1 existe dans le dictionnaire et la valeur associée est valeur1
La clé clé4  n'existe pas dans le dictionnaire
liste des clés et valeurs après suppression de clé1
dico(clé2)=valeur2
dico(clé3)=valeur3
liste des clés et valeurs après suppression de tous les éléments

3.19. Sortowanie tablicy lub słownika

Często zdarza się, że chcemy posortować tablicę lub słownik w porządku rosnącym lub malejącym według wartości lub kluczy w przypadku słownika. Chociaż w większości języków programowania istnieją funkcje sortowania, wydaje się, że w VBScript ich brakuje. Jest to pewna luka.

3.20. Argumenty programu

Można wywołać program VBScript, przekazując mu parametry, tak jak w poniższym przykładzie:

cscript prog1.vbs arg1 arg2 .... argn

Pozwala to użytkownikowi na przekazanie informacji do programu. W jaki sposób program je pobiera? Przyjrzyjmy się poniższemu programowi:

Program
Wyniki
C:\>cscript arg1.vbs a b c

Il y a 3 arguments
a
b
c

Komentarze

  • WScript.Arguments to kolekcja argumentów przekazanych do skryptu
  • kolekcja C to obiekt posiadający
    • właściwość count, która określa liczbę elementów w kolekcji
    • metodę C(i), która zwraca element i kolekcji

3.21. Pierwsze zastosowanie: IMPOTS

Postanawiamy napisać program umożliwiający obliczenie podatku podatnika. Rozważamy uproszczony przypadek podatnika, który ma do zadeklarowania wyłącznie swoje wynagrodzenie:

  • obliczamy liczbę udziałów pracownika nbParts = nbEnfants/2 + 1, jeśli jest on osobą stanu wolnego, nbEnfants/2+2, jeśli jest żonaty, gdzie nbEnfants to liczba jego dzieci.
  • Następnie oblicza się jego dochód podlegający opodatkowaniu R = 0,72 * S, gdzie S to jego roczne wynagrodzenie
  • oblicza się jego współczynnik rodzinny Q = R/N

oblicza się jego podatek I na podstawie następujących danych

12620,0
0
0
13 190
0,05
631
15640
0,1
1290,5
24 740
0,15
2072,5
31810
0,2
3309,5
39 970
0,25
4900
48360
0,3
6898,5
55790
0,35
9316,5
92970
0,4
12106
127860
0,45
16754,5
151250
0,50
23147,5
172 040
0,55
30710
195 000
0,60
39312
0
0,65
49 062

Każdy wiersz zawiera 3 pola. Aby obliczyć podatek I, należy znaleźć pierwszy wiersz, w którym QF ≤ pole1. Na przykład, jeśli QF = 30000, znajdziemy wiersz

    24740        0.15        2072.5

Podatek I wynosi wówczas 0,15*R – 2072,5*nbParts. Jeśli QF jest takie, że warunek QF <= pole1 nigdy nie jest spełniony, wówczas stosuje się współczynniki z ostatniego wiersza. W tym przypadku:

    0                0.65        49062

co daje podatek I = 0,65 * R – 49062 * nbParts.

Program wygląda następująco:

Program
' obliczenie podatku dla podatnika
' program należy wywołać z trzema parametrami: stan cywilny, liczba dzieci, wynagrodzenie
' stan cywilny: znak O, jeśli jest żonaty, N, jeśli jest niezamężny
' dzieci: liczba dzieci
' wynagrodzenie: roczne wynagrodzenie bez centów

' nie przeprowadza się żadnej weryfikacji poprawności danych, ale
' sprawdza się, czy jest ich rzeczywiście trzech

' obowiązkowe zadeklarowanie zmiennych
Option Explicit

' sprawdza się, czy są 3 argumenty
Dim nbArguments
nbArguments=wscript.arguments.count
If nbArguments<>3 Then
    wscript.echo "Syntaxe : pg marié enfants salaire"
    wscript.echo "marié : caractère O si marié, N si non marié"
    wscript.echo "enfants : nombre d'enfants"
    wscript.echo "salaire : salaire annuel sans les centimes"
     ' zatrzymanie z kodem błędu 1
    wscript.quit 1
End If

' pobieramy argumenty bez sprawdzania ich poprawności
Dim marie, enfants, salaire
If wscript.arguments(0) = "O" Or wscript.arguments(0)="o" Then
    marie=true
Else
    marie=false
End If
' „dzieci” jest liczbą całkowitą
enfants=cint(wscript.arguments(1))
' „salaire” jest liczbą całkowitą typu long
salaire=clng(wscript.arguments(2))

' dane niezbędne do obliczenia podatku definiuje się w 3 tablicach
Dim limites, coeffn, coeffr
limites=array(12620,13190,15640,24740,31810,39970,48360, _
55790,92970,127860,151250,172040,195000,0)
coeffr=array(0,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45, _
0.5,0.55,0.6,0.65)
coeffn=array(0,631,1290.5,2072.5,3309.5,4900,6898.5,9316.5, _
12106,16754.5,23147.5,30710,39312,49062)

' oblicza się liczbę udziałów
Dim nbParts
If marie=true Then
    nbParts=(enfants/2)+2
Else
    nbParts=(enfants/2)+1
End If
If enfants>=3 Then nbParts=nbParts+0.5

' oblicza się współczynnik rodzinny i dochód podlegający opodatkowaniu
Dim revenu, qf
revenu=0.72*salaire
qf=revenu/nbParts

' oblicza się podatek
Dim i, impot
i=0
Do While i<ubound(limites) And qf>limites(i)
    i=i+1
Loop
impot=int(revenu*coeffr(i)-nbParts*coeffn(i))

' wyświetla się wynik
wscript.echo "impôt=" & impot

' program kończy działanie bez błędu
wscript.quit 0
Wyniki
C:\>cscript impots1.vbs o 2 200000

impôt=22504

C:\>cscript impots1.vbs o 2 20000

impôt=0

C:\>cscript impots1.vbs o 2 2000000

impôt=746064

C:\>cscript impots1.vbs n 2 200000

impôt=33388

C:\>cscript impots1.vbs n 3 200000

impôt=22504

C:\>cscript impots1.vbs

Syntaxe : pg marié enfants salaire
marié : caractère O si marié, N si non marié
enfants : nombre d'enfants
salaire : salaire annuel sans les centimes

Komentarze:

  • program wykorzystuje elementy omówione wcześniej (deklaracja zmiennych, argumenty, zmiany typów, testy, pętle, tablica w wariancie)
  • nie sprawdza poprawności danych, co w rzeczywistym programie byłoby nieprawidłowe
  • Jedynie pętla while stanowi pewną trudność. Ma ona na celu ustalenie indeksu i tablicy „limites”, dla którego zachodzi warunek limites(i) > qf, i to dla i < ubound(limites) (c.a.d. Tutaj i < 13), ponieważ ostatni element tablicy „limites” nie ma znaczenia. Został on dodany wyłącznie po to, aby test [Do While i<ubound(limites) And qf>limites(i)] mógł zostać przeprowadzony dla i=13. Test ten ma wówczas postać 13<13 oraz qf>limites(13), a zatem (w VBScript) element limites(13) musi istnieć. Po wyjściu z pętli while ostatnia obliczona wartość i pozwala obliczyć podatek: [impot=int(revenu*coeffr(i)-nbParts*coeffn(i))].