RESTORE (BASIC)
RESTORE (BASIC) | |
Syntax: | RESTORE Ab BASIC 3.5: RESTORE <Zeile> |
Parameter | |
<Zeile>: numerischer Ausdruck für eine Zeilennummer | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Variablen |
Aufgabe: | Zurücksetzen bzw. Setzen der DATA-Position |
Abkürzung: | reS |
Token: | $8c (140) |
Verwandte Befehle | |
DATA, READ |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl RESTORE unter BASIC V2 des Commodore 64.
Der BASIC-Befehl RESTORE (nicht zu verwechseln mit der RESTORE -Taste) setzt die interne Position, die auf die nächste von READ gelesene DATA-Konstante zeigt, auf den Beginn (erster Wert in der ersten im Programm vorkommenden DATA-Zeile) zurück.
Als parameterloser Befehl führen etwaige dem Befehl folgende Angaben zu einem ?SYNTAX ERROR.
Erweiterung ab BASIC 3.5
Ab BASIC 3.5 kann dem RESTORE-Befehl optional eine Zeilennummer in Form eines beliebigen numerischen Ausdrucks mitgegeben werden. In diesem Fall wird der READ-Zeiger auf den ersten Wert des ersten DATA-Statements der angegebenen Zeile gesetzt. Existiert die Zeile nicht, so wird ein ?UNDEF'D STATEMENT ERROR bezogen auf die Zeilennummer mit dem RESTORE-Befehl ausgegeben.
Werte für die Zeilennummer außerhalb des Bereichs von 0 bis 65535 führen zur Fehlermeldung ?ILLEGAL QUANTITY ERROR. Handelt es sich beim Ausdruck nicht um eine Zahl (Zeichenkette), führt dies zum Fehler ?TYPE MISMATCH ERROR. Mehr als ein Parameter oder eine sonstige, fehlerhafte Parametersyntax münden in den Fehler ?SYNTAX ERROR.
Beispiele[Bearbeiten | Quelltext bearbeiten]
RESTORE unter BASIC 2.0[Bearbeiten | Quelltext bearbeiten]
10 FOR X=0 TO 10: READ A(X): PRINT A(X),;:NEXT 20 RESTORE 30 PRINT: PRINT "NOCHMAL UND VERGLEICH: ":FOR X=0 TO 10: READ A: PRINT "1." A(X),"2." A:NEXT 40 DATA 10,20,30,40,-55,60,70,0,90,100,111,225,388
Es sind mehr Daten vorhanden, als verarbeitet werden. Im 2. Durchlauf werden die bereits eingelesenen Zahlen den neu gelesenen Zahlen gegenüber gestellt.
RESTORE ab BASIC 3.5[Bearbeiten | Quelltext bearbeiten]
10 B=2 20 RESTORE 30*B 30 DATA "VON ZEILE 30" 40 READ V$ 50 PRINT V$ 60 DATA "VON ZEILE 60"
Hier wird ein berechnendes RESTORE verwendet. Allerdings ist diese Konstruktion mit Vorsicht zu genießen. Da die Zeilennummernangabe von RENUMBER berücksichtigt und zu korrigieren versucht wird, kann die Zeilenberechnung aus verschiedenen Gründen scheitern:
- Die Berechnung an sich liefert nach dem RENUMBER nicht mehr die Zeilennummer der passenden Zeile.
- Wie im obigen Beispiel wird eine anfängliche Konstante für eine Zeilennummer gehalten und von RENUMBER korrigiert, wenn es "zufällig" eine entsprechende Zeilennummer gab.
Zur Demonstration des letztgenannten Punktes macht ein
RENUMBER 10,1
daraus dann
10 B=2 11 RESTORE 12*B 12 DATA "VON ZEILE 30" 13 READ V$ 14 PRINT V$ 15 DATA "VON ZEILE 60"
wodurch auch die Rechenvorschrift doppelt zunichte gemacht ist und kaum noch Anhaltspunkte zur ursprünglichen und richtigen Berechnung verbleiben. Aber auch wenn, wie mit
11 RESTORE B*30
die Änderung der Konstante verhindert wird, so bleibt die Berechnungsvorschrift üblicherweise aus erstgenanntem Grund fehlerhaft.
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT