RESTORE

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

RESTORE unter BASIC 2.0

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

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.