TAB

Aus C64-Wiki
Wechseln zu: Navigation, Suche
TAB
Format: TAB(<Spaltenposition>)
Parameter
<Spaltenposition>: numerischer Ausdruck im Wertebereich von 0 bis 255
Einordnung
Typ: Ausgabefunktion
Kontext: Ein/Ausgabe
Aufgabe: positioniert Cursor in der gewünschten Spaltenposition
Abkürzung: tA (ergibt "TAB(")
Verwandte Befehle
POS, SPC

Anmerkung: Dieser Artikel beschreibt die BASIC-Ausgabefunktion TAB unter BASIC V2 des Commodore 64.


Hinter der BASIC-Ausgabefunktion TAB() steht das BASIC-Schlüsselwort "TAB(" − die öffnende Klammer ist inkludiert. Diese Funktion beeinflusst die Ausgabe so, dass Positionierung des Cursors an die gewünschte Spalte erreicht wird. Die Cursor-Spaltenposition des Bildschirms, die mittels Funktion POS() abfragbar ist, wird entsprechend aktualisiert. Mit dieser Ausgabefunktion lassen sich am Bildschirm tabellarische Ausgaben formatieren, wo an den gewünschten Spaltenpositionen Werte genau übereinander stehen, auch wenn die davor stehenden Ausgaben unterschiedlich lang sind. Beispielsweise eine Liste der 2er-Potenzen von 0 bis 10 (Bit-Wertigkeiten):

10 FOR I=0 TO 10
20 PRINT 2↑I;TAB(10);I
30 NEXT I
RUN
 1         0
 2         1
 4         2
 8         3
 16        4
 32        5
 64        6
 128       7
 256       8
 512       9
 1024      10

READY.

Die Funktionsweise ist dem Tabulatorverhalten des Kommatrennzeichens bei PRINT ähnlich, sodass die Zeile 20 ersetzt durch PRINT 2↑I, I die gleiche Ausgabe wie oben liefert. Der Unterschied liegt allerdings im Verhalten beim Überlauf der Tabulatorposition durch die vorhergehende Ausgabe. Bei TAB folgt die Ausgabe an der nächsten Position des Cursors, während ein Komma die nächste (fixe 10er) Tabulatorposition anspringt. In beiden Fällen wäre das Layout der Tabelle jedenfalls beschädigt. Die Ausgabefunktion TAB kann mehrfach in einer Zeile verwendet werden, ist aber nur im Zusammenhang mit den Befehlen PRINT bzw. PRINT# und CMD erlaubt, andernfalls kommt es zur Fehlermeldung ?SYNTAX ERROR.

Das einzige Argument Spaltenposition darf einen Wert von 0 bis 255 annehmen, ansonsten wird die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR ausgegeben. Ist das Argument kein Zahlenwert, so erscheint die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR. Fehlt das Argument, so wird ?SYNTAX ERROR gemeldet.

Während am Bildschirm die Positionierung durch Bewegung des Cursors erfolgt (ohne Überschreiben am Bildschirm dargestellter Zeichen), verhält sich TAB bei anderen Ausgabegeräten (Drucker, Floppy-Datei, etc.) wie SPC und erzeugt so viele Leerzeichen (PETSCII-Code 32), wie im Argument angegeben.
Wenn sich die Ausgabe nicht auf den Bildschirm bezieht und die Bildschirmposition des Cursors in der 1. Spalte ist, dann produzieren TAB(10), SPC(10) und , ein jeweils identisches Ergebnis. Der Bezug auf die Spalte rührt daher, dass TAB immer die Spaltenposition (entsprechend POS()) heranzieht, auch wenn die Ausgabe auf einem anderen Gerät stattfindet.[1]

Beispiele[Bearbeiten]

10 PRINT "TAB:" TAB(10) "6 ZEICHEN BIS SPALTE 10" TAB(54) "21 BIS SPALTE 54"
20 L$="0123456789": PRINT L$;L$;L$;L$ : REM LINEAL

erzeugt die Ausgabe (Zeilenumbruch bei Spalte 40)

TAB:      6 ZEICHEN BIS SPALTE 10          
              21 BIS SPALTE 54
0123456789012345678901234567890123456789

... also einfache Tabulator-Positionierung.

Vergleich TAB und Komma[Bearbeiten]

10 FOR I=0 TO 10
20 PRINT 10↑I;TAB(10);I
30 NEXT I

Erst bei I=8 kommt es zu einem Überlauf von der 1. in die 2. Tabulatorspalte.

10 FOR I=0 TO 10
20 PRINT 10↑I, I
30 NEXT I

Schon bei I=7 hat der Cursor die Position 10 erreicht und das Komma erzwingt dann den Sprung zur nächsten Tabulatorposition 20.

Mit Leerzeichen positionieren[Bearbeiten]

Entweder mit

OPEN 1,3
PRINT#1,TAB(10)

oder

OPEN 1,3: CMD 1
PRINT TAB(10)

werden zum Erreichen der 11. Spalte Leerzeichen verwendet, die am Schirm etwaige alte Inhalte überschreiben.

Syntax-Besonderheiten[Bearbeiten]

10 PRINT "DIE ZEILE ..." TAB(0)
20 PRINT "GEHT WEITER!"

Sonderfall: TAB am Ende eines PRINT-Befehls - verhält sich wie ein Semikolon (;), d.h. der Zeilenwechsel wird unterdrückt.

PRINT#1,TAB(255)+"XYZ"

Schreibt einen Datensatz mit Länge von 258 Zeichen (wenn der logische Kanal 1 z.B. eine Datei auf einem Diskettenlaufwerk geöffnet hat). Dabei wird übrigens das Plus (+) als simples Trennzeichen, nämlich wie ein Semikolon (;), und nicht als String-Operator interpretiert.

PRINT "X"+TAB(255)

Im Gegensatz zum vorigen Beispiel ist hier das Plus (+) ein String-Operator, da an dieser Stelle eine Ausdrucksauswertung stattfindet und dabei die in dieser Umgebung nicht erlaubte Funktion TAB angetroffen wird, kommt es schließlich zum Abbruch mit dem Fehler ?SYNTAX ERROR.

Referenzen[Bearbeiten]

  1. BASIC-ROM $AAFA Sprache:englisch: Behandlung von TAB( zieht immer die Bildschirmspalte heran, unabhängig vom Ausgabegerät.