| Startseite | Inhalt
StarBasic / OpenOffice.org Basic FAQ
Fragen und Infos: starbasic@dannenhoefer.de

Zurück Vor |
| 3.7 Welche Variablentypen gibt es?
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. |
Seitenanfang |

2003 - 2009 von Michael Dannenhöfer |
Letzte Aktualisierung: 06.04.2009