IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Fallunterscheidungen in Open Office Basic



Fallunterscheidungen in Open Office Basic

Ein Programm besteht grundsätzlich aus einer Reihe von Aufträgen die der Computer nacheinander ausführt um ein bestimmtes Ergebnis zu erzielen. Der Verlauf eines Programms würde immer die selbe sein wenn es nicht einen Weg gäbe diesen Verlauf zu steuern, bzw. von bestimmten Bedingungen abhängig zu machen. Ein Tutorial.


Autor: Patrick Faes (dreamer)
Datum: 22-07-2007, 22:39:04
Referenzen: OpenOffice.org
OOoMacros.org
Schwierigkeit: Anfänger
Ansichten: 10508x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



In seiner simpelsten Form besteht ein Progamm aus einigen Aufträgen die zusammen das gewünschte Resultat erzielen. So z.B. wird folgendes Programm den Benutzer nach seinem Alter fragen und diese dann wieder ausgeben mit dem Satz "Sie sind x Jahre alt."

Klicken Sie hier um eine Simulation in Javascript zu sehen.

Der Programmcode für dieses Beispiel währe in Open Office Basic:

alter = InputBox("Wie alt sind Sie?")
MsgBox "Sie sind " & alter & " Jahre alt."

Dieses Programm könnten Sie dutzend mal ausführen, das Resultat würde immer gleich sein. Deshalb gibt es die Möglichkeit die Ausführungs eines Programms von vorgegebenen Bedingungen abhängig zu machen. So könnte ein Programm z.B. überprüfen ob der Benutzer schon volljährig ist.

Klicken Sie hier um eine Simulation in Javascript zu sehen.

Ein Programm dazu könnte wie folgt aussehen:

Dim alter As Integer
alter = InputBox("Wie alt sind Sie?")

If alter < 18 Then
	MsgBox "Sie sind noch minderjährig."
Else
	MsgBox "Sie sind schon volljährig."
EndIf

Dieses Skript fragt erneut wie alt Sie sind. Danach prüft es ob das angegebene Alter unter 18 ist. Wenn dies der Fall ist, wird der Text "Sind sind noch minderjährig" ausgegeben. Ansonsten wird der Text "Sie sind schon volljährig" ausgegeben.

Derartige Skripte können noch viel komplexer sein als obiges Beispiel. Wie Sie dies in Open Office Basic realisieren, erfahren weiter in diesem Artikel.


Fallunterscheidungen

Um verschiedene Fälle zu unterscheiden, müssen Bedingungen geprüft werden. Dies machen Sie mit dem Schlüsselwort "if" (wenn). Dem folgen eine Bedingung und das Schlüsselwort "then" (dann).

Ein Beispiel:

If 3 < 5 Then

Dies liest sich als "wenn 3 < 5, dann mache ...". Danach folt dann eine Anweisung, bzw. ein Befehl den der Computer ausführen soll. Beachten Sie dass in Open Office Basic (genau wie in andere Basic-Varianten auch) Programmaufträgen jeweils eine Zeile einnehmen. Deshalb muss der auszuführende Befehl auf der nächsten Zeile stehen.

Erweitern wir unser aktuelles Beispiel mal mit dem Befehl MsgBox ("Message Box", Nachrichtenbox), der einen Text ausgibt:

If 3 < 5 Then
	MsgBox "3 ist kleiner als 5"
EndIf

Dieser Befehl wird nur ausgeführt wenn 3 kleiner ist als 5.
Der Code besteht aus drei Zeilen Code: auf der ersten Zeile wird geprüft ob die Bedingung (3 < 5) erfüllt ist (was ja der Fall ist). Wenn die Bedingung erfüllt ist, wird der Auftrag auf der zweiten Zeile ausgeführt. Auf der dritten Zeile wird der Code-Block abgeschlossen.

Was mit einem Code-Block gemeint ist? Es handelt sich dabei um eine Reihe von Aufträgen die zusammen gehören. Es kann z.B. sein dass mehrere Aufträge ausgeführt werden sollen.

Ein Beispiel:

If 3 < 5 Then
	summe = 3 + 5
	MsgBox summe
EndIf

Jetz werden zwei Aufträge ausgeführt. Es wird zuerst die Summe der Zahlen 3 und 5 gespeichert in der Variable summe und diese wird dann vom Skript ausgegeben.

Wenn nur ein einziger Befehl ausgeführt werden soll, kann man alles auf einer einzigen Zeile zusammenfassen:
If 3 < 5 Then MsgBox "3 < 5"
Wie schon gesagt, müssen alle Aufträge in Open Office Basic jeweils auf einer eigenen Zeile stehen. Sehr lange Aufträge können (die Lesbarkeit des Codes halber) aber auch auf mehreren Zeilen verteilt werden, indem am Ende einer Zeile ein Liegestrich ( _ ) steht.

If 3 < 5 Then _
	MsgBox "3 < 5"

Beachten Sie dabei dass nach dem Liegestrich kein einziges Zeichen (auch keine Leerstelle!) mehr kommen darf. Dies führt ohne Ausnahme zu einem Programmfehler.

Darauf hinzuweisen ist auch noch, dass bei einer einzeiligen Fallunterscheidung (wo die Bedingung und der Auftrag zusammen auf einer Zeile stehen, wie ober gezeigt) es nicht möglich ist mehrere Aufträge jeweils getrennt von einem Kolon ( : ) getrennt auf der selben Zeile zu schreiben.

Mehrere Aufträge können so (um die Übersichtlichkeit zu verbessern) auf der selben Zeile stehen:

a = 3 : a = a + 3 : MsgBox a

Jedoch wenn dies bei einer Fallunterscheidung verwendet wird, werden die einzelnen Aufträge nicht zur Fallunterscheidung gerechnet, sprich sie werden immer ausgeführt:

If a = 3 Then a = a + 3 : MsgBox a


Mehrere Fallunterscheidungen

Bisher wurde nur gezeigt wie jeweils eine einzige Bedingung geprüft wurde, und wie ein Auftrag ausgeführt werden soll wenn die Bedingung erfüllt ist. Es ist aber auch möglich einen anderen Auftrag auszuführen wenn die Bedingung nicht erfüllt ist. Dazu können wir noch ein "Else-Block" hinzufügen. Ein "If-Else-Block" könnte man auf Deutsch lesen als "Wenn dies, dann mach das, ansonsten mach das".

Folgendes Beispiel demonstriert dies. Zuerst wird geprüft ob die Zahl 16 kleiner ist als 7. Wenn dies der Fall wäre, dann würde der Text "16 ist kleiner als 7" ausgegeben werden. Ansonsten wird der Text "16 ist nicht kleiner als 7" ausgegeben.

If 16 < 7 Then
	MsgBox "16 ist kleiner als 7"
Else
	MsgBox "16 ist nicht kleiner als 7"
EndIf

Es ist aber ebenso möglich nacheinander mehrere Bedingungen zu prüfen und bei Erfüllung einer Bedingung die dazu gehörigen Aufträgen auszuführen. Dazu verwenden wir die "ElseIf"-Klausel (Else If = ansonsten wenn). Wenn eine Bedingung also nicht erfüllt ist, dann wird die jeweils nächste geprüft, bis eine Bedingung erfüt ist. Dann werden die dazugehöhrige Aufträge ausgeführt und werden keine weiteren Bedingen mehr geprüft.

If 16 < 7 Then
	MsgBox "16 ist kleiner als 7"
ElseIf 16 > 15 Then
	MsgBox "16 ist größer als 15"
Else
	MsgBox "16 ist nicht kleiner als 7"
EndIf

Das Ergebnis würde in diesem Beispiel sein dass der Text "16 ist größer als 15" auf dem Bildschirm angezeigt wird. Sie können (theoretisch) beliebig viele Bedingungen nacheinander prüfen und am Ende dann noch Aufträge im Else-Block aufnehmen falls keine Bedingung zutrifft. Eine derartige Reihe von Bedingungen nennt man einen "Verzweigungsbaum". Die Verwendung eines Else-Blocks ist aber keine Pflicht, so dass diese entfallen kann wenn Sie dies so wollen.

Beachten Sie noch dass Sie die freie Wahl haben die Schlüsselwörter in Groß- oder Kleinbuchstaben zu schreiben. Das heißt dass IF, If und if alle gleich gut funktionieren. Die Lesbarkeit halber sollten Sie sich aber einen Stil zurechtlegen wodurch sich die Schlüsselwörter von z.B. Texte unterscheiden lassen.


Vergleichsoperatoren

Die Bedingungen von denen die Ausführung eines Programms abhängig ist, sind sehr vielfältig. Die bisherigen Beispiele überprüften jeweils nur eine numerische Gleichheit oder ob eine angegebene Zahl kleiner, bzw. größer ist als eine andere Zahl. Die Bedingungen die es zu überprüfen gibt, sind aber um einiges vielfälltiger.

Open Office Basic bietet dazu folgende Operatoren:

Operator Bedeutung
= Der Gleichheitsoperator prüft, ob zwei Variablen denselben Wert enthalten.
<> Der Ungleichheitsoperator stellt fest, ob zwei Variablen sich unterscheiden.
> Prüft ob der Wert links vom Operator kleiner ist als der Wert rechts.
> Prüft ob der Wert links vom Operator größer ist als der Wert rechts.
<= Prüft ob der Wert links vom Operator kleiner oder gleich ist als der Wert rechts.
>= Prüft ob der Wert links vom Operator größer oder gleich ist als der Wert rechts.
Is Testet ob zwei Variablen das gleiche Objekt (z.B. einen Button) referenzieren.

Eine Prüfung gibt immer einen Wert vom Typ Boolean zurück. Dies ist ein so genannter "Wahrheitswert". Er kann die Werte True (wahr) und False (unwahr) enthalten. Damit können dann die Bedingungen ausgewertet werden.

Diesen Wert kann auch in einer Variable gespeichert werden und dann später angewand werden. Folgendes Beispiel demonstriert dies:

Dim test As Boolean
test = 3 < 5

If test = True Then MsgBox "3 < 5"

Zuerst wird getestet ob 3 kleiner als 5 ist und die Antwort darauf wird gespeichert in der Variable test. Danach kann dieser ausgewertet werden, indem wir testen ob diese gleich den Wert True (also wahr) ist.

Dieses Beispiel hätten wir auch kürzer schreiben können.

Dim test As Boolean
test = 3 < 5

If test Then MsgBox "3 < 5"

In diesem Beispiel besteht die Bedingung einfach nur aus dem Wert True. Sie ist also immer erfüllt.

Bisher haben wir immer jeweils nur eine Bedingung geprüft. Moderne Programme sind aber um einiges komplexer. Deshalb lassen sich Bedingungen kombinieren. Dabei werden Operatoren verwendet die festlegen, inwieweit die verschiedene Bedingungen erfüllt sein müssen um die folgenden Befehlen auszuführen.

Ein Übersicht dieser Operatoren:

Operator Bedeutung
AND Dieser Operator verknüpft zwei Bedingungen. Nur wenn beide Bedingungen erfüllt sind, werden die nachfolgenden Befehle vom Programm befolgt.

Im Klartext:
If 3 < 4 AND 5 = 5 Then [True]
If 3 < 4 AND 5 = 8 Then [False]
If 1 > 29 AND 6 > 3 Then [False]
If 5 = 3 AND 3 = 5 Then [False]
OR Der OR-Operator reiht Bedingungen aneinander von denen mindestens eine Zutreffen soll.

Im Klartext:
If 3 < 4 OR 5 = 5 Then [True]
If 3 < 4 OR 5 = 8 Then [True]
If 1 > 29 OR 6 > 3 Then [True]
If 5 = 3 OR 3 = 5 Then [False]
XOR Stellt eine exklusive OR-Verknüpfung vor. Es läßt sich am Besten beschreiben als "entweder - oder". Die Befehle werden also nur ausgeführt wenn nur eine der Bedingungen erfüllt ist.

Im Klartext:
If 3 < 4 XOR 5 = 5 Then [False]
If 3 < 4 XOR 5 = 8 Then [True]
If 1 > 29 XOR 6 > 3 Then [True]
If 5 = 3 XOR 3 = 5 Then [False]
NOT Kehrt das Resultat einer Prüfung um, sprich wenn eine Bedingung erfüllt ist, wird sie als unerfüllt angesehend und umgekehrt. Die Bedingung muss dabei zwischen runden Klammern stehen, ansonsten funktioniert der NOT-Operator nicht.

Im Klartext:
If NOT (3 > 5) Then [True]
If NOT (3 < 5) Then [False]
EQV Die Bedingung wird als ganzes als erfüllt angesehen wenn beide Bedingungen gleichermaßen erfüllt oder nicht erfüllt sind.

Im Klartext:
If 3 < 5 EQV 4 < 6 Then [True]
If 3 < 5 EQV 4 > 6 Then [False]
If 3 > 5 EQV 4 < 6 Then [False]
If 3 > 5 EQV 4 > 6 Then [True]
IMP Der IMP-Operator steht für eine Implikation, sprich die eine Bedingung impliziert die andere Bedingung. Bei der zweiten Bedingung handelt es sich dann um eine Schlussfolgerung aus der ersten Bedingung. Nun kann man aus einer richtigen Aussage (z.B. 3 < 5) etwas richtiges folgern, und aus einer falschen Aussage etwas falsches. Ebenso kann man aus einer falschen Aussage etwas richtiges folgern, jedoch kann man aus etwas falsches nichts richtiges folgern. Daher trifft der IMP-Operator immer zu, es sei denn die erste Bedingung ist nicht erfüllt, die zweite jedoch schon.

Im Klartext:
If 2 < 4 IMP 1 < 4 Then [True]
If 2 > 4 IMP 1 > 4 Then [True]
If 2 < 4 IMP 1 > 4 Then [True]
If 2 > 4 IMP 1 < 4 Then [False]

Die hier gezeigten Beispiele kombinieren jeweils nur zwei Bedingungen. Sie können jedoch (theoretisch) beliebig viele Bedingungen kombinieren. Um darin noch verschiedene Operatoren unterscheiden zu können, bzw. deren Reihenfolge bei der Auswertung zu bestimmen, müssen Sie die Bedingungen zwischen runden Klammern stellen.

Einige Beispiele:
  • If (Bedingung1 AND Bedingung2) OR Bedingung3
    Ist erfüllt wenn Bedingung3 wahr ist oder Bedingung1 UND Bedingung2
  • If Bedingung1 XOR (Bedingung2 OR Bedingung3 OR Bedingung4)
    Ist wahr wenn entweder Bedingung1 erfüllt ist oder einer der drei anderen (Bedingungen 2 bis 4)
  • If NOT (Bedingung1 AND Bedingung2)
    Maximal einer der beiden Bedingungen darf erfüllt sein, also nicht beide gleichzeitig (das Umgekehrte von AND also)
  • If (Bedingung1 OR Bedingung2) AND (Bedingung3 OR Bedingung4) AND NOT (Bedingung5)
    Etwas komplexer: die Aussage ist nur wahr, wenn einer der ersten beiden Bedingung erfüllt ist, ebenso einer der folgenden beiden (3 und 4) erfüllt ist und zeitgleich die fünfte Bedingung nicht erfüllt ist


Typumwandlungen

Im Prinzip können nur Werte vom gleichen Typ verglichen werden. Eine Ziffer 3 ist an sich nicht dem Text "3" gleich. Open Office Basic ist da sehr komfortabel, indem es diese Daten automatisch versucht umzuwandeln in einem anderen Typ. Sprich, wenn ich versuchen würde eine Ziffer drei mit einem Text "3" zu vergleichen, wird Open Office selbst versuchen den Text in eine Ziffer umzuwandeln. Damit wäre der Vergleich erfolgreich, bzw. könnte ausgeführt werden. Dieses Verfahren nennt man "implizite Konvertierung".

Nur leider funktioniert dies auch nicht immer. Deshalb kann man auch vorher versuchen die Daten umzusetzen. Dazu geben Sie eine Variable an eine Funktion und diese wird (wenn die Daten erfolgreich umgewandelt werden konnten) den Wert in einem anderen Variablentyp zurück. Dies ist bekannt als "explizite Konvertierung". Leider ist auch diese Variante nicht immer fehlerfrei.

Im Normalfall werden Sie die explizite Konvertierung nie brauchen. Wenn Sie aber daran interessiert sind, schauen Sie sich mal im Forum zu Open Office um (OOoForum.org).


Besondere Fallunterscheidungen

Open Office Basic kennt noch zwei weitere Anweisungen um Fallunterscheidungen auszuführen. Die Select-Anweisung und die iif()-Anweisung.

Manchmal muss nur geprüft werden ob eine Variable einen Wert aus einer Reihe von Werten entspricht. Dazu eignet sich die Select-Anweisung.

x = 100

Select Case x
	Case 80
		MsgBox "x = 80"
	Case 90
		MsgBox "x = 90"
	Case 100
		MsgBox "x = 100"
End Select

Mit der Anweisung "Select Case x", nimmt die Select-Anweisung Bezug auf die Variable x. Dann wird nacheinander geprüft ob der Wert von x gleich 80, 90 oder 100 ist. Wenn eins der Werte zutrifft, werden alle Befehle die dazu gehören (bis zur nächsten Case-Anweisung also) ausgeführt.

Im obigen Beispiel trifft die letzte Case-Anweisung zu. Eventuelle nachkommende Case-Anweisungen werden nicht mehr überprüft, wie folgendes Beispiel demonstriert.

x = 100

Select Case x
	Case 80
		MsgBox "x = 80"
	Case 90
		MsgBox "x = 90"
	Case 100
		MsgBox "x = 100"
	Case 110
		MsgBox "x = 110"
End Select

Die letzte Case-Anweisung (mit dem Wert 110) wird nicht mehr überprüft, da die Vorletzte bereits zutrifft. Eine weitere Möglichkeit besteht darin noch einen Case-Else-Zweig hinzuzufügen. Die Befehle die dazu gehören werden ausgeführt wenn keine andere Werte zutreffen. Die Case-Else-Anweisung kommt immer an letzter Stelle.

x = 100

Select Case x
	Case 80
		MsgBox "x = 80"
	Case 90
		MsgBox "x = 90"
	Case 110
		MsgBox "x = 110"
	Case Else
		MsgBox "Wert nicht gefunden"
End Select

Die Select-Anweisung kann nicht nur mit exacte Werte, sondern auch mit Wertebereiche arbeiten.

x = 100

Select Case x
	Case < 20
		MsgBox "x < 20"
	Case < 40
		MsgBox "x < 40"
	Case < 80
		MsgBox "x < 80"
	Case > 90
		MsgBox "x > 90"
End Select

Als letztes gibt es noch die iif()-Anweisung, welche eine kurze Schreibweise ist für eine If-Else-Abfrage in dem es nur eine Alternative gibt und dazu dient einen Wert an einer Variable zu geben. Ein Beispiel:

If 8 < 20 Then
	a = "1"
Else
	a = "2"
EndIf

Dies könnte man mittels der iif()-Anweisung verkürzen zu

a = iif(8 < 20, 1, 2)

Die iif()-Anweisung sieht wie folgt aus:

iif(Bedingung, Wert1, Wert2)


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06243
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1144
Comments: 0