Eine andere Anwendungsweise wäre vielleicht 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. Damit 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 umleiteten.
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 Variablenfeldern. Dies klingt vielleicht etwas
merkwürdig, doch werden Sie gleich verstehen, was damit geimeint ist.
Ein Feld, oder eine Fläche, hat ja, wie
Sie vielleicht aus dem Geometrieunterricht 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 beinhaltet. 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 bestimmte Variable darstellt. Anwendungsgebiete gibt es hierfür wie Sand am
Meer. Angenommen, Sie möchten ein Programm schreiben, daß alle Adressen Ihrer
Bekannten und Verwandten speichert. Gehen wir einmal davon aus, daß dies maximal 100 bis 200 an der Zahl sind. Möchten Sie nun alle diese Namen in " norma- len" Variablen speichern, so würden Sie
jedesmal einen neuen Variablennamen heraussuchen müssen, damit BASIC diese
voneinander unterscheiden kann. Stellen
Sie sich einmal das Chaos vor, daß Sie
dann in einem Programm hätten.200 Variablen, 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 wollen, 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 meterlangen Listings von IF-Abfragen vor, die man machen müßte, um eine ganz bestimmte Adresse herauszufinden. Außerdem
wüßte man noch nicht einmal welche Variablen zu einer Adresse gehören. Deshalb gibt es die Feldvariablen. Sie sollen hier eine Abhilfe schaffen. Auf diese Art und Weise können nämlich beispielsweise alle Namen in einem Variablennamen zusammengeafßt werden, oder
alle Straßennamen, oder alle Städtenamen. . .
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 Anzahl der in ihm zu speichernden Daten, festlegen müssen.
In unserem Fall einer Adressverwaltung
nehmen wir ( beispielsweise) den Variablennamen NA$ für " Name" . Die Dimensionierung wird mit einem eigenen BASIC-Befehl durchgeführt, dem DIM-Befehl. Bei
diesem wird zuerst der Name des Variablenfeldes 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 gesetzt, nachgestellt. In dem Feld NA$ können wir nun also 200 Variablen unterbringen.
Um jetzt ein einzelnes dieser 200 Datenelemente adressieren zu können, müssen
wir seine Indexnummer, ebenfalls in Klammern gesetzt, einfach dem Feldnamen
nachstellen. Diese Datenelemente eines
Feldes werden übrigens genauso gehandhabt, 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 Zuweisungen ausgelegt. Wie bei Strings
auch geben Sie den obigen " Variablennamen" 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, dementsprechend 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 numerisch größeren Variablen vornehmen. Sie
haben hierbei also freie Hand. Wie wärs, wenn wir " Herrn Schultze" im 134 . Datenelement unterbrächten, kein Problem:
NA$(134)=" SCHULTZE"
Doch die eigentliche Stärke der Feldvariablen liegt nicht darin, daß man sie
in einem Namen zusammenfassen kann, sondern 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 wollten Herrn Schultze in unserem Datenfeld
wiederfinden, dann wäre folgendes Programm 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 einzelnen Feldelementen mit dem Index 134 ebenfalls die zu Herrn Schultze gehörigen 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 Datensatz zu finden. Auch beim Abspeichern
haben wir keine Probleme, wir brauchen
lediglich eine Schleife zu programmieren, die alle Datenelemente des Feldes
von 0 bis 200 in ein WRITE-File
schreibt.
Wie Sie sahen, hatten wir ein eindimensionales 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 Datenelemente dimensioniert wurde, von denen
jedes einzelne wiederum 10 weitere Datennelemente aufnehmen kann. Diese können Sie dann folgendermaßen ansprechen:
PRINT A$(523,3)