Eine andere Anwendungsweise wäre viel- leicht die Möglichkeit, ein Programm in Form von ASCII-Zeichen in einem File zu speichern, um es, zum Beispiel mit Hilfe eines Terminalprogramms, in eine Mailbox zu schicken. In diesem Fall müßten Sie nur ein sequentielles File zum Schreiben öffnen, mit CMD die Ausgabe auf dieses File umleiten und das Programm dann LISTen. Eines wäre jedoch noch zu beachten. Da- mit Sie nämlich wieder aus dem CMD- Befehl herauskommen, um dann die Ausgabe wieder auf den Bildschirm zu leiten, müssen Sie einen einfachen PRINT#-Befehl nachschieben, ohne Parameter, etwa so: PRINT#1 Wobei hier anstelle der "1" auch jede andere Zahl stehen könnte, je nachdem, welche Filenummer Sie vorher beim OPEN- Befehl benutzt hatten, auf dessen geöff- neten Kanal Sie dann die Ausgabe umlei- teten. Anschließend sollte man den Kanal auch noch schließen, also: CLOSE 1 :REM (je nach Filenummer) Damit hätten wir das Thema Peripherie abgeschlossen. Ich muß Ihnen nun noch etwas über Variablen erzählen. Wie wir diese handhaben und vor allem, wie wir deren Namen wählen, hatten wir ja schon im 1. und 2. Teil dieses Kurses geklärt. Es gibt allerdings noch eine weitere Art Variablen zu benutzen, nämlich durch die Definition von sogenannten Variablenfel- dern. Dies klingt vielleicht etwas merkwürdig, doch werden Sie gleich ver- stehen, was damit geimeint ist. Ein Feld, oder eine Fläche, hat ja, wie Sie vielleicht aus dem Geometrieunter- richt noch wissen, zwei Ausdehnungen. Zum einen die Länge und zum anderen die Breite. Man sagt auch "ein Feld hat zwei Dimensionen". Es ist also ein Objekt der Zweiten Dimension. Ebenso gibt es eine Erste Dimension, die alle Strecken bein- haltet. Diese haben nur eine einzige Ausdehnung, nämlich die Länge. Diesen Begriff der Dimension kann man nun auch auf Variablen übertragen. Es gibt nämlich in BASIC die Möglichkeit, mehrere Variablen mit dem gleichen Namen anzulegen, die alle jedoch voneinander unterschieden werden, indem man ihnen einen sogenannten Index gibt. Das heißt, daß jeder Variable eine bestimmte Zahl nachgestellt wird, die eine ganz be- stimmte Variable darstellt. Anwendungs- gebiete gibt es hierfür wie Sand am Meer. Angenommen, Sie möchten ein Pro- gramm schreiben, daß alle Adressen Ihrer Bekannten und Verwandten speichert. Ge- hen wir einmal davon aus, daß dies maxi- mal 100 bis 200 an der Zahl sind. Möch- ten Sie nun alle diese Namen in "norma- len" Variablen speichern, so würden Sie jedesmal einen neuen Variablennamen he- raussuchen müssen, damit BASIC diese voneinander unterscheiden kann. Stellen Sie sich einmal das Chaos vor, daß Sie dann in einem Programm hätten. 200 Va- riablen, von denen Sie nicht mehr genau wissen was zu wem gehört. Wenn man davon ausgeht, daß Sie vielleicht zu jedem Namen auch noch Straße, Hausnummer, Wohnort und Telefonnummer speichern wol- len, dann müßte Herr Müller aus der Bahnhofstaße 37 in 8000 München und der Telefonnummer 089/12345678 etwa in folgenden Variablen verteilt werden :
AX$="Herr Mueller" FR$="Bahnhofstraße" KL=37 OG=8000 TA$="Muenchen" XD$="089/12345678"
Sie sehen also, wir haben hier wahllos verteilte Variablen vor uns, die nichts über ihren Inhalt aussagen, da jeder nur erdenkliche Variablenname genutzt werden muß. Stellen Sie sich doch nur die me- terlangen Listings von IF-Abfragen vor, die man machen müßte, um eine ganz be- stimmte Adresse herauszufinden. Außerdem wüßte man noch nicht einmal welche Va- riablen zu einer Adresse gehören. Des- halb gibt es die Feldvariablen. Sie sol- len hier eine Abhilfe schaffen. Auf die- se Art und Weise können nämlich bei- spielsweise alle Namen in einem Varia- blennamen zusammengeafßt werden, oder alle Straßennamen, oder alle Städtena- men... Doch wie wirds gemacht? Dazu wollen wir jetzt kommen. Zuerst müssen wir eine Variable "dimensionieren". Im Klartext heißt das, daß wir einen Namen für das Variablenfeld und die maximale An- zahl der in ihm zu speichernden Daten, festlegen müssen. In unserem Fall einer Adressverwaltung nehmen wir (beispiels- weise) den Vari- ablennamen NA$ für "Na- me". Die Dimen- sionierung wird mit einem eigenen BASIC- Befehl durchgeführt, dem DIM-Befehl. Bei diesem wird zuerst der Name des Variab- lenfeldes angegeben und anschließend seine maximale Ausdehnung. Wir wollen also 200 Stringvariablen im Feld NA$ speichern. Deshald also diese Anweisung: DIM NA$(200) Schon wäre unser Feld dimensioniert. Wir haben hier ein eindimensionales Feld vor uns, dem DIM-Befehl wird zuerst der Feldname und dann die maximale Anzahl aller Datenelemente, in Klammern ge- setzt, nachgestellt. In dem Feld NA$ können wir nun also 200 Variablen unter- bringen. Um jetzt ein einzelnes dieser 200 Date- nelemente adressieren zu können, müssen wir seine Indexnummer, ebenfalls in Klammern gesetzt, einfach dem Feldnamen nachstellen. Diese Datenelemente eines Feldes werden übrigens genauso gehand- habt, wie die Variablenart in der sie dimensioniert wurden. Wir haben hier einen Stringvariablennamen angegeben, also haben wir auch 200 Stringvariablen vordefiniert. Demnach sind auch die Zu- weisungen ausgelegt. Wie bei Strings auch geben Sie den obigen "Variablenna- men" an und weisen ihm mit Hilfe des "="-Zeichens eine Zeichenkette zu. Etwa so: NA$(0)="HERR MUELLER" Hier haben wir dem 0. Datenelement den String "Herr Mueller" zugewiesen. Sie erinnern sich ja : der Computer fängt immer bei 0 an zu zählen, dementspre- chend ist das 0. Datenelement der erste Eintrag in unserem Datenfeld. Doch wir müssen hier keineswegs einer numerischen Reihenfolge der Variablenzuweisung vor- gehen. Vielmehr können Sie ebenfalls auch Zuweisungen von Werten bei nume- risch größeren Variablen vornehmen. Sie haben hierbei also freie Hand. Wie wärs, wenn wir "Herrn Schultze" im 134. Date- nelement unterbrächten, kein Problem: NA$(134)="SCHULTZE" Doch die eigentliche Stärke der Feldva- riablen liegt nicht darin, daß man sie in einem Namen zusammenfassen kann, son- dern vielmehr, daß man mit Hilfe einer Schleife gezielt ein Feld nach einem bestimmten Datensatz durchsuchen kann, ohne dabei großen Programmieraufwand leisten zu müssen. Angenommen wir woll- ten Herrn Schultze in unserem Datenfeld wiederfinden, dann wäre folgendes Pro- gramm schnell und einfach geschrieben:
100 FOR I=0 TO 200 110 IF NA$(I)="HERR SCHULTZE" THEN 130 120 NEXT 130 PRINT"HERR SCHULTZE STEHT IM DATENS ATZ NR.";I
Wenn wir nun die anderen Daten ebenfalls so anlegen, daß wir 200 Datenelemente darin speichern können und den einzel- nen Feldelementen mit dem Index 134 ebenfalls die zu Herrn Schultze gehöri- gen Daten zuordnen, so können wir ganz einfach mit Hilfe der Variablen I auf alle Datenelemente der Adresse von ihm zugreifen, etwa so:
200 PRINT NA$(I) :REM NAME 210 PRINT SR$(I) :REM STRASSE 220 PRINT NR(I) :REM HAUSNUMMER 230 PRINT PL(I),OR$(I) :REM PLZ UND ORT 240 PRINT TE$(I) :REM TELEFONNUMMER
Und schon wäre die gesamte Adresse von Herrn Schultze ausgedruckt, da wir ja vorher die einzelnen Elemente ebenfalls den Feldelementen mit der Nummer 134 zuweisen wollten. So einfach ist es dann beispielsweise einen bestimmten Daten- satz zu finden. Auch beim Abspeichern haben wir keine Probleme, wir brauchen lediglich eine Schleife zu programmie- ren, die alle Datenelemente des Feldes von 0 bis 200 in ein WRITE-File schreibt. Wie Sie sahen, hatten wir ein eindimen- sionales Feld dimensioniert. Es hatte also nur EINE Ausdehnung. Man kann dies jedoch beliebig erweitern. Wie wäre es denn mit einem zwei-, drei-, oder gar vierdimensionalen Feld? Bitte:
DIM A$(1000,10) DIM B%(10,3) DIM C(5,5,5)
Mit diesen Dimensionierungen haben wir nun also veranlaßt, daß beispielsweise ein Feld mit dem Namen A$ für 1000 Date- nelemente dimensioniert wurde, von denen jedes einzelne wiederum 10 weitere Da- tennelemente aufnehmen kann. Diese kön- nen Sie dann folgendermaßen ansprechen: PRINT A$(523,3)