3 Programmieren mit VBScript

3 Programmieren mit VBScript Windows Scripting lernen ISBN 3-8273-2019-4 In diesem Kapitel werden die Grundlagen für das Programmieren mit VBScript ...
100 downloads 4 Views 117KB Size
3

Programmieren mit VBScript Windows Scripting lernen ISBN 3-8273-2019-4

In diesem Kapitel werden die Grundlagen für das Programmieren mit VBScript vermittelt. Dazu gehören die grundlegenden Regeln, die beim Erstellen von VBScript-Code notwendig sind, sowie das Arbeiten mit Konstanten und Variablen. Anschließend wird die Verwendung von Bedingungen und Schleifen besprochen, mit denen der Ablauf des Skripts gesteuert werden kann. Weiterhin geht es um eingebaute Funktionen und selbst definierte Unterroutinen. Am Ende wird das Rüstzeug für den Umgang mit Laufzeitfehlern vermittelt.

Lernziel

Ein großes Gebiet der VBScript-Programmierung ist die Arbeit mit Objekten. Dieses wichtige Thema ist in Kapitel 4 ausgelagert.

3.1 Die Visual Basic-Sprachfamilie Die Sprache BASIC (Beginners All Purpose Symbolic Instruction Code) hat bei Microsoft eine lange Geschichte, zunächst als QBasic, später als Visual Basic. Innerhalb der Microsoft Windows-Welt ist Visual Basic die beliebteste Programmiersprache. Visual Basic gibt es in vier Dialekten: • Das eigentliche Visual Basic zur Entwicklung eigenständiger Anwendungen, • Embedded Visual Basic zur Entwicklung für Windows CE (dem Handheld-Betriebssystem von Microsoft), • Visual Basic for Applications (VBA) als Makrosprache in Microsoft Office und anderen Endbenutzer-Anwendungen • und Visual Basic Script (VBS) für den Windows Script Host (WSH) und andere Skript-Umgebungen in Windows-Anwendungen.

Die Visual Basic-Sprachfamilie

41

VBA und VBScript haben ähnliche Anwendungsgebiete. Der Hauptunterschied liegt darin, dass VBScript kostenlos ist, während Microsoft für die Verbreitung von Anwendungen mit integriertem VBA kräftig Lizenzgebühren kassiert. VBA ist außerdem nicht nur eine Sprache, sondern umfasst auch eine komfortable Entwicklungsumgebung, worin der Hauptgrund für den hohen Preis zu suchen ist. Visual Basic

Visual Basic.NET (Visual Basic 7.0)

In VB.NET entfallene Befehle

Visual Basic 6.0 / VBA 6.0 Visual Basic 5.0 VBA 5.0

VBScript 5.1 / 5.5

Zusätzliche Befehle, die es nur in VBScript gibt

© [email protected]

Abbildung 3.1: Sprachumfang der VB-Dialekte

Wie in Kapitel 1 bereits erwähnt ist Visual Basic Script eine InterpreterSprache, bei der die Befehle erst während des Ablaufs zeichenweise in Maschinensprache-Befehle für den Mikroprozessor umgesetzt werden.

3.2 Allgemeines zum Arbeiten mit VBScript Innerhalb dieses Abschnittes geht es um grundlegende Regeln und den Aufbau von VBScript-Dateien. Im Gegensatz zu anderen Sprachen gibt es nur wenige Konventionen, die eingehalten werden müssen. Als Erstes einige einfache Regeln für die formale Struktur (Syntax) von VBScript:

VBScript-Syntax

• Grundsätzlich enthält jede Zeile genau einen Befehl. • Es ist möglich, mehrere Befehle getrennt durch einen Doppelpunkt in eine Zeile zu schreiben. Auf diese Möglichkeit sollten Sie aber aus Gründen der Übersichtlichkeit verzichten.

42

Programmieren mit VBScript

• Wenn Befehle sich über mehr als eine Zeile erstrecken sollen, müssen alle Zeilen mit nicht abgeschlossenen Befehlen mit einem Unterstrich „_“ enden. • Leerzeilen, Leerzeichen und Tabulatoren sind in beliebiger Häufung erlaubt, um den Skriptcode übersichtlicher zu machen. • VBScript ist nicht case-sensitive: Die Groß- und Kleinschreibung der Schlüsselwörter ist also ebenso ohne Bedeutung wie die Schreibweise Ihrer selbst gewählten Bezeichner für Variablen, Unterroutinen, etc. • Sofern es nicht durch Bedingungen, Schleifen oder Unterroutinen (die Sie in diesem Kapitel später kennen lernen werden) anders bestimmt wurde, wird ein Skript sequenziell ausgeführt. Die Ausführung beginnt in der ersten Zeile. Folglich ist die Reihenfolge der Befehle für die korrekte Ausführung des Skripts grundsätzlich wichtig. In vielen Fällen gibt es jedoch mehrere verschiedene richtige Reihenfolgen. Demnach ist die Reihenfolge nicht beliebig. Bei der Erstellung von VBScript-Code gibt es also prinzipiell die Möglichkeit, mehrere Anweisungen (Befehle) in eine Zeile zu schreiben. Diese Befehle müssen dazu allerdings mit einem Doppelpunkt (:) voneinander getrennt werden.

Ein Befehl pro Zeile

ErsterBefehl(): ZweiterBefehl() : DritterBefehl()

Allerdings entspricht dies nicht ganz der ordentlichen Programmierung. Damit der erstellte Code einfach zu lesen ist, sollte man pro Zeile immer nur einen Befehl verwenden: ErsterBefehl() ZweiterBefehl() DritterBefehl()

Im Gegensatz zu anderen Sprachen, wie z.B. C++ oder Java, hält es VBScript mit der Groß- und Kleinschreibung nicht so genau. Es wird nicht zwischen diesen beiden Schreibweisen unterschieden, sodass die folgenden Codezeilen absolut identisch interpretiert werden:

Groß- und Kleinschreibung

IF wert1>wert2 THEN wert2 = wert1 If wert1>wert2 Then wert2 = wert1 if wert1>wert2 then wert2 = wert1

Zwar ist es in VBScript möglich, sehr lange Codezeilen zu schreiben, allerdings sind diese für die Lesbarkeit nicht gerade von Vorteil. Sollte einmal der Fall auftreten, dass eine sehr lange Codezeile entsteht, so kann man zwischen zwei Zeichen, die nicht zu einem Befehl oder Wert gehören, durch einen Unterstrich (_) _ trennen und in der nächsten Zeile fortsetzen. Das folgende Beispiel verdeutlicht diese Möglichkeit.

Allgemeines zum Arbeiten mit VBScript

Zeilenumbrüche

43

If (Wert1>Wert2) And (Wert2>Wert3) Or (Wert1>Wert3) Then … End If

Dieser Code kann durch Umbrechen von Zeilen mit dem Unterstrich wie folgt dargestellt werden: If (Wert1>Wert2) And _ (Wert2>Wert3) Or _ (Wert1>Wert3) Then … End If

3.3 Kommentare Grundsätzlich sollte man bei der Programmierung dem eigentlichen Programmcode zusätzliche Kommentare hinzufügen, um das Programm für sich selbst und andere verständlich zu machen. Ein gutes Skript zeichnet sich dadurch aus, dass es gut lesbar ist, d.h. dass der Code ist entsprechend kommentiert wurde. Zwar kann man anhand des Programmcodes oft schon sehen, was innerhalb eines Skripts geschieht, allerdings wird diese Lesbarkeit durch Kommentare wesentlich verbessert. Um einen Kommentar innerhalb eines Codes zu definieren, muss dieser mit einem Hochkomma (') oder mit dem Schlüsselwort REM eingeleitet werden. ' ' ' ' '

Kommentare.vbs Kommentieren von Quellcode Autor: [email protected] verwendet: keine weiteren Komponenten ===============================

' Dies ist ein Kommentar REM Dies ist auch ein Kommentar Listing 3.1: Kommentare.vbs

Dieses Beispiel enthält, wie jedes Beispiellisting in diesem Buch, einige Kommentarzeilen, die das Skript beschreiben (Name der Datei, Beschreibung, Autor, etc.), sowie zwei beispielhafte Kommentare mittels Hochkomma (') und REM-Befehl.

44

Programmieren mit VBScript

3.4 Literale Bei Literalen handelt es sich um statische Werte, die direkt innerhalb des Codes hinterlegt werden. Literale werden zum Beispiel für folgende Aufgaben verwendet: • Texte, die das Skript ausgeben soll • Namen von Dateien, die das Skript auslesen soll • Schwellwerte, die für Gültigkeitsprüfungen verwendet werden sollen Es gibt verschiedene Arten von Werten: Ganzzahlige numerische Werte werden einfach durch die Aneinanderreihung von Ziffern dargestellt. Bei Fließkommazahlen (nicht-ganzzahligen numerischen Werten) wird das Dezimaltrennzeichen nicht durch ein Komma dargestellt, sondern – amerikanisch – durch einen Punkt.

Zahlen

Neben dem Dezimalsystem unterstützt VBScript noch zwei andere Zahlensysteme: Hexadezimalzahlen werden durch ein vorangestelltes "&h", Oktalzahlen durch ein "&o" kenntlich gemacht.

Andere Zahlensysteme

Beim Scripting werden manchmal Zahlen als Hexadezimalzahlen oder Oktalzahlen dargestellt, weil die Darstellung einer bestimmten Zahl in diesen Zahlensystemen einfacher ist als im Dezimalsystem. Zeichenketten werden in Anführungszeichen (") dargestellt. Jeweils am Anfang und am Ende des Textes begrenzt dieses Zeichen die Zeichenketten. Möchte man innerhalb einer Zeichenkette selbst ein Anführungszeichen darstellen, so muss dieses mittels doppelter Anführungszeichen geschehen, z.B. „Hier ist ein Anführungszeichen “„Hallo“„ ! “.

Strings

Datums- und Uhrzeit-Werte werden innerhalb von zwei Nummerzeichen (#) dargestellt. Darüber hinaus erfolgt die Darstellung im amerikanischen Format, d.h. mm/dd/yyyy. Für das Datum „11. April 1975“ schreibt man also: #04/11/1975#. Auch die Uhrzeit muss in amerikanischer Schreibweise angegeben werden, z.B. #04/11/1975 11:15:00AM#)

Datum und

Die Wahrheitswerte (boolsche Werte) „Wahr“ und „Falsch“ werden mittels der beiden Wörter True und False dargestellt.

True und False

Die Darstellung von Währungswerten ist abhängig von den Währungseinstellungen innerhalb der Systemsteuerung. Für eine auf Euro eingestellte Systemsteuerung wäre folgender Wert möglich: „3.231,59 €“. Dabei muss der Wert innerhalb von Anführungszeichen angegeben werden.

Währungs-

Literale

Uhrzeit

angaben

45

Empty und Null

Der Sonderzustand „noch kein Wert zugewiesen“ wird durch das Wort Empty angezeigt; der Sonderzustand „Variable hat keinen mehr“ wird durch das Wort Null dargestellt.

Ausgabe von

Die einfachste Möglichkeit der Verwendung von Literalen ist der in Kapitel 1 vorgestellte WScript.Echo-Befehl. Das folgende Beispiel zeigt, wie WScript.Echo die beschriebenen Formen von Literalen ausgibt. Die Ausgabe zeigt, dass Hexadezimalzahlen und Oktalzahlen immer als Dezimalzahlen ausgegeben werden.

Werten

' ' ' ' '

Literale.vbs Ausgabe von Literalen Autor: [email protected] verwendet: keine weiteren Komponenten ==================================================================

' Ausgabe von Zahlen WScript.Echo(123123) WScript.Echo(323.923) WScript.Echo(&o77) WScript.Echo(&h0AE1) WScript.Echo("Mein Name ist Oliver") WScript.Echo(#04/11/1975#) WScript.Echo(#04/11/1975 11:15:00AM#) WScript.Echo(True) WScript.Echo(False) WScript.Echo("3.412,56 €") WScript.Echo(Null) WScript.Echo(Empty) Listing 3.2: Literale.vbs

Abbildung 3.2: Literale in der Kommandozeile, ausgeführt mit CScript.exe

46

Programmieren mit VBScript

3.5 Konstanten Bei Konstanten handelt es sich um fest definierte Werte, die sich über den gesamten Zeitraum der laufenden Anwendung nicht verändern sollen bzw. die vom Design her auch nicht verändert werden dürfen. Ihr Zweck liegt darin, feste Werte zu definieren, die im laufenden Skript immer wieder verwendet werden können. Diesen Werten wird durch eine Konstantendefinition ein Name gegeben, sodass über diesen Namen auf den Wert zugegriffen werden kann.

Konstanten

Ein typisches Beispiel, das auch immer wieder in diesem Buch vorkommt, ist der Name des anzusprechenden Computers. Dieser muss oft mehrmals in einem Skript verwendet werden. Wenn der Name sich ändert, müsste normalerweise auch das Skript an mehreren Stellen geändert werden. Aus diesem Grund definiert man besser am Anfang des Skripts eine Konstante: Const COMPUTER = "Sonne"

Danach verwendet man nicht mehr das Literal „Sonne“, sondern COMPUTER als Alias für das Literal „Sonne“. Const COMPUTER = "Sonne" Wscript.Echo "Zugriff auf den Computer " & COMPUTER ' ... diverse Befehle ... Wscript.Echo "Computer " & COMPUTER & " wurde neu gestartet."

Wichtig ist, dass COMPUTER nicht innerhalb der Anführungszeichen steht, sondern über das kaufmännische Und-Zeichen mit den beiden Literalen „Computer“ und „wurde neu gestartet.“ verbunden ist. Alternativ kann zur Verkettung auch das Plus-Zeichen verwendet werden.

Kaufmännisches UND

Würden Sie schreiben „Computer COMPUTER wurde neu gestartet.“, dann würde der WSH genau das buchstabengetreu ausgeben und nicht den Namen „Sonne“ an die richtige Stelle einbauen. Eine Ersetzung einer Konstanten durch den zugewiesenen Wert findet nur statt, wenn der Name der Konstante nicht in Anführungszeichen steht. Das Wort COMPUTER ist ein beliebiger Begriff, der in diesem Zusammenhang Bezeichner genannt wird. Das Wort komplett groß zu schreiben ist kein Muss; in diesem Buch werden aber alle selbst definierten Konstanten groß geschrieben. Im Gegensatz zu Variablen (diese werden im Unterkapitel 3.6 beschrieben) kann der Wert von Konstanten zur Laufzeit nicht verändert werden. Wird dies versucht, so tritt ein Laufzeitfehler auf.

Konstanten

47

Bei Bezeichnern handelt es sich um vom Skriptentwickler vergebene Namen für Konstanten, Variablen und Unterroutinen. Die Namen dürfen relativ flexibel definiert werden, unterliegen allerdings den folgenden Regeln: • Sie müssen mit einem Buchstaben beginnen.

Regeln für Bezeichner

• Sie dürfen nicht länger als 255 Zeichen sein. • Sie dürfen nicht mit Schlüsselwörtern der Sprache identisch sein. • Sie dürfen außer dem Unterstrich keine Satz- oder Sonderzeichen enthalten.

3.5.1

Vordefinierte Konstanten

VBScript enthält bereits ein umfangreiches Repertoire an vordefinierten Konstanten, die in verschiedenen Szenarien eine große Hilfe darstellen. So gibt es beispielsweise für einige Grundfarben Konstanten, die den Zahlenwert für die Farbe kapseln, sodass man sich nicht mehr diese Zahl, sondern nur noch den Namen merken muss.

Kommentare

Die eingebauten Konstanten erkennt man an ihrem Namen. Sie beginnen stets mit „vb“. ' ' ' ' '

KonstantenStandard.vbs Arbeiten mit Konstanten Autor: [email protected] verwendet: keine weiteren Komponenten ===============================

WScript.Echo("Dies ist ein Beispiel für Standardkonstanten von VBScript.") WScript.Echo("Eine Zeile." & vbCrLf & "Noch eine Zeile." & vbCrLf & _ "Und noch eine Zeile.") Listing 3.3: KonstantenStandard.vbs

Abbildung 3.3: Ausgabe des Listings

48

Programmieren mit VBScript

Das Beispiel zeigt die Verwendung der Konstanten vbCrLf. Diese Konstante steht für die Zeichen, die für einen Zeilenumbruch zuständig sind. Dies wird in einem der folgenden Unterkapitel noch näher erläutert.

3.5.2

Definieren eigener Konstanten

Die bisher beschriebenen vordefinierten Konstanten reichen allerdings bei weitem nicht in allen Fällen aus. Um die Entwicklung von Skripten zu verbessern und durch eigene Konstanten den Skriptcode lesbarer und wartbarer zu gestalten, ist es möglich, eigene Konstanten zu definieren. Dies geschieht mit dem Schlüsselwort Const. Jede beliebige Art von Literalen kann zugewiesen werden. Const conMeinAlter = 27 Const conMeinComputer = "R2D2" Const conDatum = #08/31/02# Const MEIN_NAME = "Oliver"

Für die Entwicklung von Skripten und die Verwendung von Konstanten empfiehlt es sich, eine einheitliche Form für die Vergabe von Konstantennamen zu verwenden. Dabei gibt es keine verpflichtenden Vorgaben, allerdings gibt es bereits einige sinnvolle Schreibweisen für Konstanten. Zum einen kann durch das Voransetzen von „con“ für „Const“ ein Bezeichner als Konstante gekennzeichnet werden, z.B. conFesterWert. Eine weitere Möglichkeit wäre aber auch die Großschreibung des Bezeichners, z.B. FESTER_WERT. Dadurch werden Les- und Wartbarkeit wesentlich verbessert. Letztere Notation verwenden wir in diesem Buch.

3.5.3

Namen für Konstanten

Verwenden von Konstanten

Das folgende Beispiel definiert zwei Konstanten MEIN_NAME und MEIN_ALTER. Diese beinhalten eine Zeichenkette und eine Zahl. Diese Werte werden innerhalb der Anwendung für eine Ausgabe des Namens und für den Vergleich des Alters des Benutzers verwendet. ' ' ' ' '

Konstanten.vbs Arbeiten mit Konstanten Autor: [email protected] verwendet: Const ===============================

Const MEIN_NAME = "Oliver" Const MEIN_ALTER = "27"

Konstanten

49

' Ausgabe des Namens des Skript-Autors WScript.Echo("Mein Name ist " & MEIN_NAME & ".") ' Ausgabe des Alters des Skript-Autors WScript.Echo("Ich bin " & MEIN_ALTER & " Jahre alt.") Listing 3.4: Konstanten.vbs

3.6 Variablen Bei Variablen handelt es sich – ähnlich wie bei Konstanten – um Speicher für einzelne Werte. Wie in Konstanten können auch in Variablen beliebige Literale aufgenommen werden. Im Gegensatz zu Konstanten sind die Inhalte von Variablen aber zur Laufzeit des Skripts, wie der Name schon sagt, variabel – sie lassen sich verändern. Die Veränderung kann die Zuweisung eines anderen Literals sein oder die Zuweisung eines Ausdrucks, der ein Ergebnis erreicht. „Ausdruck“ ist ein anderes Wort für eine Formel. Ein Ausdruck besteht aus mindestens einem Operator und mindestens einer Variablen oder Konstanten.

Variablen

Variablen werden innerhalb von Skripten dazu verwendet, dynamisch Werte aufzunehmen, um mit diesen weiterzuarbeiten und sie auf beliebige Weise zu manipulieren, um so zu einem gewünschten Ergebnis zu kommen. Für die Namen von Variablen gelten die gleichen Regeln wie für die Namen von Konstanten. Variablen schreiben wir in diesem Buch in normaler Groß-/Kleinschreibweise. Um eine Variable von einem Befehl unterscheiden zu können, verwenden wir folgende Vereinbarung: 1. Alle Variablen-Bezeichner sind auf Deutsch (sofern es nicht nur ein-

fache Namen wie x und y sind). 2. Befehle erhalten als Zusatz immer ein Klammernpaar (). Das ist so

üblich und Sie werden später noch verstehen warum.

3.6.1

Verwenden von Variablen

Eine Variable kann auf der linken oder rechten Seite einer Zuweisung verwendet werden.

50

Form

Beispiel

Variable = Literal

Name = "Holger Schwichtenberg"

Variable1 = Variable2 Operator Variable3

Name = "Holger " & "Schwichtenberg"

Programmieren mit VBScript