DATA

Aus C64-Wiki
Zur Navigation springenZur Suche springen
DATA
Syntax: DATA <Konstante> [,<Konstante>]...
Parameter
<Konstante>: Zahl oder Zeichenkette
Einordnung
Typ: Anweisung
Kontext: Variablen
Aufgabe: Hinterlegen von Konstanten
Abkürzung: dA
Token: $83 (131)
Verwandte Befehle
READ, RESTORE

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl DATA unter BASIC V2 des Commodore 64.


Der BASIC-Befehl DATA dient dem Hinterlegen unveränderlicher Informationen (Konstanten), die per BASIC-Befehl READ der Reihe nach eingelesen werden können. Pro DATA-Zeile können mehrere Konstanten getrennt durch Kommas hinterlegt werden.

Die Daten aus den DATA-Zeilen werden immer von links nach rechts beginnend bei der ersten DATA-Zeile im Programm eingelesen, wobei die gerade aktuelle Position vermerkt wird (DATA-Zeiger).
Zeichen können entweder direkt oder in Anführungszeichen (dabei muss der Wert einem solchen beginnen) hinterlegt werden. Die Zeichen Komma, führende Leerzeichen, endende Leerzeichen ohne nachfolgendes Komma-Trennzeichen, Doppelpunkt, Sonder- und Steuerzeichen müssen zwingend in Anführungszeichen als Zeichenkettenkonstante angegeben werden. Mit dem BASIC-Befehl RESTORE kann der Zeiger für die nächste zu lesende DATA-Konstante zurückgesetzt (üblicherweise auf die erste DATA-Zeile im BASIC-Programm, ab BASIC 3.5 auch gezielt mit Zeilenauswahl).

Wird der falsche Variablentyp zum Einlesen beim BASIC-Befehl READ benutzt, so erscheint die BASIC-Fehlermeldung ?SYNTAX ERROR mit der Zeilennummernangabe für die entsprechende DATA-Zeile, die gerade verarbeitet wurde (das auslösende READ-Kommando wird hier nicht erwähnt und ist so auch nicht ohne weiteres feststellbar). Ab BASIC 3.5 lautet der Fehler hingegen ?TYPE MISMATCH ERROR und die Zeilenangabe verweist auf den auslösenden READ-Befehl.

DATA-Zeilen können beliebig im Programm verteilt sein, es ist aber günstig, sie ans Ende zu legen, um Sprungbefehle nicht zu verlangsamen.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Verschiedene Datentypen / besondere Zeichen einlesen[Bearbeiten | Quelltext bearbeiten]

10 DATA 1, 2, 3, APFEL, "COMMODORE 64"
20 DATA ."GAENSEFUESSCHEN"
30 DATA "DIES ; IST : EIN # TEST , ODER ? "
40 READ A
50 READ B%, C, D$
60 READ E$
70 READ F$, G$
80 PRINT A, B%, C, D$, E$, F$ : PRINT "("G$")"

Es werden Leerzeichen, Anführungszeichen, Komma, Doppelpunkt in den Werten berücksichtigt bzw. behandelt. Ergibt die Ausgabe:

 1         2         3        APFEL
COMMODORE 64        ."GAENSEFUESSCHEN"
(DIES ; IST : EIN # TEST , ODER ? )


Besonderheiten bei Leerzeichen in Zeichenketten[Bearbeiten | Quelltext bearbeiten]

10 DATACOMMODORE 64
11 DATA COMMODORE 64 :
12 DATA COMMODORE 64 , COMMODORE 64
13 DATA " COMMODORE 64 "
20 READ A$,B$,C$,D$,E$
25 PRINT ,,"ZEICHENKETTENLAENGE":PRINT
30 PRINT A$, LEN(A$)
40 PRINT B$, LEN(B$)
50 PRINT C$, LEN(C$)
60 PRINT D$, LEN(D$)
70 PRINT E$, LEN(E$)

                    ZEICHENKETTENLAENGE

COMMODORE 64         12
COMMODORE 64         13
COMMODORE 64         13
COMMODORE 64         12
 COMMODORE 64        14

B$ und C$ enthalten ein endendes Leerzeichen aufgrund des nachfolgenden Befehltrenners (":") bzw. Kommas, E$ durch die Anführungszeichen sowohl ein führendes als auch ein endendes Leerzeichen. Bei den übrigen Variablen werden weder führende noch endende Leerzeichen erkannt und gespeichert.

Binärdaten[Bearbeiten | Quelltext bearbeiten]

Auch Binärdaten oder Maschinenspracheprogramme können als DATA-Zeilen gespeichert werden:

 100 q=830:fora=qtoq+13:readb:pokea,b:next
 110 data32,155,183,134,211,32,155,183,32,140,232,76,19,171
 120 sysq,5,5,"<- position 5/5"

Das Beispiel zeigt ein PRINT AT-ähnliches Hilfsprogramm.

Auf diese Weise gespeicherte Binärdaten verbrauchen relativ viel BASIC-Speicherplatz: Jedes Byte des Maschinenspracheprogramms benötigt zwei bis vier Bytes in der DATA-Repräsentation; dazu kommt noch der Speicherplatzverbrauch durch Zeilennummern und DATA sowie die Einleseroutine.

Eine effizientere Lösung wird im Thema: Speicheroptimiertes READ-DATA auf Forum64.de vorgestellt.