Zeichenfolgen
Zeichenfolgen sind Variablen die Textzeichen beinhalten. Zeichenfolgen, im englischen
"Strings" bezeichnet, werden für die Verarbeitung von Text verwendet.
Man kann Inhalte vergleichen, löschen oder kürzen. In Starbasic heißen sie String-Variablen.
Um eine Variable als String zu deklarieren verwendet man folgende Zeilen
Dim MyText as String
oder
Dim MyText$
Innerhalb einer solchen Variable können sie Zeichenfolgen mit einer maximal Länge
von bis zu
65535 Zeichen speichern. Also eigentlich ein ganze Menge.
Um einer String-Variablen einen Wert zu zuordnen muß man den gewünschten Text in
Hochkammas einklammern:
MyText = "Dies ist ein Text"
Wenn der Text länger wie eine Zeile wird, muß man in mehrere Zeilen schreiben und
jede Zeile
mit einen Hochkomma beginnen und beenden, und die einzelnen Zeilen mit einem Plus-
Zeichen ( + ) und dem Verbindungszeichen für Programmzeilen, dem Unterstrich ( _ ),
verbinden.
MyText = "Dies ist ein Text um einmal die Länge einer Zeile aus " + _
"zu probieren!"
Wenn man ein Abführungszeichen in seiner Zeichenfolge benötigt wird, muß dieses doppelt
eingefügt werden:
MyText = "Dies ist ein Test mit dem "" Zeichen" ergibt dann
Dies ist ein Test mit dem " Zeichen.
Zahlen
Zahlen sind natürlich für fast jedes Programm wichtig. Innerhalb von StarBasic gibt
es
verschiedene Typen von Zahlenvariablen. Eine der wichtigsten Unterscheidung, in allen
Programmiersprachen, ist die Trennung in ganzzahlige Variablentypen und Fließkommatypen.
Grob entpricht das der mathematischen Einteilung in ganze und rationale Zahlen.
Es gibt in Starbasic die folgenden Zahlentypen:
Integer
Long Integer
Single
Double
Currency
Integer
Integer Variablen können nur ganze Zahlen zwischen -32768 und 32767 aufnehmen.
Fließkommazahlen werden bei einer Zuweisung automatisch kaufmännisch gerundet bzw.
abgerundet.
Die Deklarion erfolgt mit
Dim MyInt as Integer
oder
Dim MyInt%
Long Integer
Integer Variablen können nur ganze Zahlen zwischen -2.147.483.648 und 2.147.483.647
aufnehmen. Fließkommazahlen werden bei einer Zuweisung automatisch kaufmännisch
gerundet bzw. abgerundet.
Die Deklarion erfolgt mit
Dim MyLongInt as Long
oder
Dim MyLongInt&
Single
Single-Variablen sind Fließkommazahlen. Sie können positive und negative Werte halten
zwischen 3,402823 * 10 38 und 1,401298 * 10-45.Ursprünglich wurden Single-Variablen
konzipiert, um den Rechner bei der
Ausführung mathematischer Operationen nicht so stark wie beim Umgang mit den
genaueren Double-Variablen zu belasten.
Die Deklartion erfolgt über
Dim MySingle as Single
oder
Dim MySingle!
Double
Double-Variablen sind Fließkommazahlen. Sie können positive und negative Werte
zwischen 1,79769313486263 * 10 308 und 4,94065645841247 * 10 -324 aufnehmen. Double-
Variablen sind geeignet für genaue Berechnungen
Die Deklartion erfolgt über
Dim MyDouble as Double
oder
Dim MyDouble#
Currency
Währungsvariablen (Currency-Variablen) sind wie Integer-, Long Integer-, Single- und
Double-Variablen für die Aufnahme von Zahlen gedacht. Die Position des Kommas ist
dabei
Curruncy festfix, weshalb sie auch keine
Fließkommavariablen sind. Sie haben immer genau vier vier Nachkommastellen.
Vor dem Komma können maximal 15 Ziffern stehen. Daher können Currency Variablen zahlen
zwischen
-922.337.203.685.466,5808 und -922.337.203.685.466,5807 enthalten. Diese ungenaue
Begrenzung, und nicht -999.999.999.999.999.,9999 bis 999.999.999.999.999,9999 liegt an dem
internen Speicherformat in 8 Byte. ?????
Anhang ????
Währungsvariablen sind insbesondere für kaufmännische Kalkulationen gedacht, bei
denen durch die Verwendung von Fließkomma-Zahlen unvorhersehbare Rundungsfehler
entstehen können.
Deklaration einer Currency-Variablen:
Dim MyCurrency as Currency
oder
Dim MyCurrency@
Verwendung von Zahlen im Programmcode
Für die Verwendung von Zahl im Programmcode gelten einige kleine Regeln:
Ganze Zahlen werde so verwendet wie man es sich vorstellt:
A=1,
B=34,
C= -56
Fließkommazahlen müssen als Kommazeichen einen Punkt haben:
D = 12.67
E = 1345.948484
Zahlen können auch in er Expontailschreibweise verwendet werden. Dies ermöglicht
eine einfache Darstellung von sehr großen und sehr kleinen Zahlen. Hier bei gilt dann
Zwischen der Zahl und dem Exponenten darf kein Leerzeichen und der Exponent muß eine
ganze Zahl sein.
F = 1.43E10
G = 2.56E-10
H = -3.22E5
Zahlen als Hexadezimalzahl können durch eine vorgestelltes "&H" zugewiesen
werden. Das
Hexadezimalsystem (16er System) hat den Vorteil, dass zwei Ziffern jeweils exakt einem Byte
entsprechen, was einen maschinennahen Umgang mit Zahlen gestattet. Als Ziffern kommen
beim Hexadezimalsystem die Ziffern 0 bis 9 sowie die Buchstaben A bis F zum Einsatz. Ein A
steht für die Dezimalzahl 10, ein F für die Dezimalzahl 15. StarOffice Basic gestattet die
Eingabe ganzzahliger Hexadezimalwerte.
I = &HFF ' FF steht 255 Decimal in Hexadecimal
Zahlen als Oktalzahl ( 8er-System können mit einem vorgestellten "&O"
zugewiesen werden.
Diese Zahlenformat wird jedoch sehr selten benötigt.
J= &O377 ' Entspricht Decimal 255.
Logisch
Eine Variable vom Typ Boolean kann nur zwei Werte annehmen Wahr oder Falsch (true
oder
false). Mit dieser Variable kann man einen Zustand feststellen oder setzen, die nur zwei
mögliche Zustände hat. Intern wird dabei mit 0 (für "Falsch") und 1 (für "Wahr")
gearbeitet. Im
allgemeinen Sprachgebrauch der Programmiersprachen handelt es sich eine boolsche
Variable. Die beste deutsche Bezeichnung ist dafür logische Variable. Die Bezeichnung
Boolean kommt von dem englischen Mathematikers George Boole. Er hat die nach ihm
benannte Bool'sche Algebra entwickelt. Die logischen Operatoren, deren Bescheibung noch
folgt, basieren auf der Bool'schen Algebra.
Die Deklaration erfolgt mit
Dim bWahr as Boolean
Setzen und Abfragen einen boolschen Variabe kann über True oder False und "1"
oder "0"
erfolgen
"bBool = 1" hat die gleiche Wirkung wie "byBool=True".
Datum/Zeit
Date-Variablen können Datums- und Zeitwerte enthalten. Bei der Speicherung von
Datumswerten verwendet StarBasic ein internes Format, das Vergleiche und mathematische
Operationen erlaubt.
Dim MyDate as Date
Datenfelder / Arrays
Eindimensionale Datenfelder
Starbasic unterstützt zusätzlich zu den einfachen Variablen auch Datenfelder. Datenfelder
(arrays) können mehrer Variablen eines Type enthalten. Diese werden über den Index des
Datenfeldes angesprochen. Mit Datenfeldern kann man zum Beispiel Gruppen von Variablen
zusammen fassen.
Einfache Arrays werden mit der Zusatzangabe über die Anzahl der Elemente deklariert:
Dim MyArray(3)
oder
Dim MyArray(3) as Typ
Auch hier wird wieder unterschieden zwischen einer Deklartion im Typ Variant und einer
spezifischen Typendeklaration. Hier gilt auch wieder Vorsicht mit dem Typen Variant! Man
kann den einzelnen Daten verschiedene Typen zuordnen. In dem Beispiel wird ein Array von
vier Elementen erzeugt. Warum es vier Elemente und drei erklären wir gleich.
Der Index eines Datenfeldes beginnt standardmäßig bei Null. Das heißt die eigentlichen
Daten
lassen sich über den Index von 0 bis Deklaration - 1 ansprechen.
MyArray(0) = 1
MyArray(1) = 1
MyArray(2) = 1
MyArray(3) = 1
Man kann den Index auch selber festlegen in dem man den Bereich einträgt. So kann
man mit
der Dekalaration
Dim MyArray( 1 to 4) as String
ebenfalls einen Array mit vier Elementen festlegen. Dieses wird dann über die Indices
1 bis 4
angesprochen. Diesen Bereisch kann man auch negative festlegen.
Dim MyArray(-3 to -10) as Integer
legt eine Array mit den entsprechenden Indices zwischen -3 und -10 fest.
Wenn man sich die möglichen Bereiche mit der Funktion x to y anschaut wird klar,
warum wir
oben vier Elemente erhalten haben. Starbasic interpretiert die vorhandene Zahl als y und setzt
dann null als Startwert.
Für Datenfelder und Indices gelten folgende Regeln:
Der kleinste erlaubte Index ist -32768.
Der größte erlaubte Index ist 32767.
Die maximale Anzahl an Elementen beträgt 16368. Also nicht die naheliegende Differenz
zwischen minimalen und maximalen Index (65535).
Zusätzlich besteht in Starbasic die Möglichkeit den Startindex für Datenfelder dauerhaft
auf
eins einstellen. Mit dem Befehl
Option Base 1
oberhalb aller Module erfolgt diese Zuweisung. Diese hat jedoch einen Haken. Durch
diese
Anweisung wird nur der Index eines Datenfeldes auf eins gesetzt. Die Anzahl der Elemente
bleibt aber erhalten. In unserem Beispiel von oben Dim MyArray(3) erhält man also wieder vier
Elemente, diesmal mit den Indices eins bis vier.
Mehrdimensionale Datenfelder
Zusätzlich zu den eindimensionalen Datenfeldern ist es in Starbasic auch möglich
mehrdimensionale Datenfelder anzulegen. Die betreffenden Dimensionen werden dabei durch
Kommata getrennt.
Dim MyArray(3,3) as String
Mit einem solchen Array lassen sich dann insgesamt 16 String-Werte zuweisen die über
die
beiden Indices 0 bis 3 ansprechbar sind. Das beste Beispiel für einen solches Datenfeld ist
eine Tabelle. Jedes Tabellenfeld läßt sich genau über zwei Indices ansprechen: Zeile und
Spalte.
Theoretisch lassen sich in Starbasic Datenfelder mit mehreren hundert Dimensionen
anlegen.
In der Praxis sind aber mehr wie drei Dimension schwer pflegbar. Zur Verdeutlichung: Zwei
Dimensionen sind eine Tabelle, drei Dimensionen sind eine drei dimensionales
Koordinatensystem, vier Dimensionen ...... usw.
Dynamische Änderung von Datenfeldern.
Bisher haben wir nur Datenfelder deklariert deren Größe wir Anfang des Programmes
kennen
und die sich nicht ändert. Mit Starbasic lassen sich aber auch Datenfelder im laufenden
Programm dimensionieren. Nicht immer lassen sich die Dimension vorher festlegen, sondern
sie werden im Ablauf des Programmes erst bekannt. Mit dem Befehl Redim ist eine
Neudimensionierung möglich. Das einzige Problem dabei ist das eingetragene Wert verloren
gehen.
Redim MyArray(5) as String
erzeugt also eigentlich nur im laufenden Programm das Datenfeld mit neuer Dimension
neu.
Manchmal hat man aber ein Array und muß es nur vergrößern und möchte die Daten nicht
verlieren. Dazu gibt es den Befehl "Redim Preserve".
Redim Preserve MyArray(10) as String
vergrößert also das Datenfeld in unserem Beispiel von fünf auf zehn und die vorhandenen
Daten
bleiben bestehen. Wichtig ist dabei nur darauf zu achten das sich die Dimension und der Typ
nicht ändert. Das ist nämlich nicht zulässig.
Zulässig ist aber auch die Verkleinerung eines Datenfeldes. Dabei werden dann die
oberen
Werte gelöscht.
Wenn man ein Array auswerten muß, von dem man die Größe nicht kennt, zum Beispiel
als
Ergebnis eine Funktion, kann mit diese mit Ubound erfahren.
anzahlfelder = ubound(array()).
Dabei ist immer daran zu denken das die Null das erste Element ist. Ist die Anzahl
zum
Beispiel 10 ist die Gesamtanzahlfelder 11.
Das Gegenstück zu ubound ist lbound. Damit wird der unterste Werte des Arrays bestimmt.
Bei mehrdimensionalen Feldern wird die Dimension bei der Abfrage mit übergeben.
Dim TestArray (2,8)
TestAnzahl = uBound(Testarray(),2)
Achtung! Die Zählung der Dimensionen beginnt hier bei 1, und nicht bei 0.
Konstanten
Zusätzlich zu Variablen lassen sich auch Konstanten deklarieren. Konstanten können
nicht
überschrieben. Das heißt sie bleiben für den gesamten Ablauf des Programmes erhalten.
Deklariert werden sie mit const.
const Konstante as Typ = Wert
Wahlweise kann man die Typendeklaration auch weglassen: const Konstante = Wert.
Konstanten machen dann Sinn wenn man weiß das man bestimmte Werte in mehreren
Modulen benötigt und diese sich nicht ändern. Ein Beispiel wäre der Euroumrechnungsfaktor.
Wenn dieser sich ändern sollte, muß man nur an einer Programmstelle den Wert ändern.
Variant
Der Datentyp Variant wird in Starbasic automatisch erstellt wenn eine Variable ohne
Typenzuordnung deklariert wird.
Variable = 1
Eine derartige Varibale kann dann auch verschiedene Typen nacheinnander aufnehmen.
sub varianttest
var1 = "Test"
msgbox var1
var1 = 1
msgbox var1
end sub
In diesem Beispiel bekommt Var1 erst eine Zeichenfolge und dann eine ganze Zahl. Der
Typ
Variant macht sich die Variable bei der Weiterverarbeitung passend. Wenn man zum Beispiel
zwei Variantvariablen addiert und die eine hat einen String und die andere eine Zahl, wird das
richtige Ergebnis berechnet wenn der String eine Zahl ist. Ansonsten kommt keine
Fehlermeldung, aber ein falsches Ergebnis. Daher ist der Einsatz von Variantvariablen mit
Vorsicht zu geniessen. Man kann sich damit "schöne" Fallen in seinen Code schreiben.
Tipp: Alle Variablen ordentlich deklarienen und auf den Typ Variant möglichst verzichten.