GET(Raute)
GET(Raute) | |
Syntax: | GET#<Dateinummer>, <Variable>[, <Variable>...] |
Parameter | |
<Dateinummer>: Nummer eines zum Lesen geöffneten Datenkanals | |
<Variable>: Variable beliebigen Typs zur Übernahme des eingelesenen Zeichens | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Ein/Ausgabe |
Aufgabe: | Einzelne Zeichen von einem Eingabekanal lesen |
Abkürzung: | - |
Token: | $a1 $23 (161 35) |
Verwandte Befehle | |
GET, INPUT, INPUT# |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl GET# unter BASIC V2 des Commodore 64.
Typ: Anweisung Syntax: GET#<Dateinummer>, <Variable>[, <Variable>...]
Der BASIC-Befehl GET# liest ein einzelnes Zeichen aus dem zur logischen Dateinummer gehörenden Gerät ein, zum Beispiel aus einem Datenkanal oder einer geöffneten Datei.
Allgemeines[Bearbeiten | Quelltext bearbeiten]
Vor der Benutzung des GET#-Befehls muss zwingend das entsprechende Gerät oder die Datei mit dem BASIC-Befehl OPEN geöffnet werden und dabei die entsprechende logische Dateinummer des OPEN-Befehls genutzt werden. Ist die Dateinummer nicht geöffnet führt dies zu einem Programmabbruch mit Fehlermeldung ?FILE NOT OPEN (auch im Fall der an sich nicht verwendbaren Dateinummer 0). Die Dateinummer darf sonst nur Werte von 1 bis 255 ergeben, sonst wird der BASIC-Fehler ?ILLEGAL QUANTITY ERROR gemeldet.
Das eingelesene Zeichen wird in einer Variable (Zeichenketten-, Fließkomma- oder Ganzzahlvariable) abgelegt. Das Verhalten ist ähnlich dem von GET und weicht nur in Details ab. Handelt es sich um eine Zahlenvariable werden nur Zeichen, die eine Zahl bilden akzeptiert (".", ",", "+", "-", "e"), wobei aber nur die Ziffern 1 bis 9 erkannt werden können, da sonst die Variable 0 immer enthält. Andere Zeichen führen zum Abbruch mit der Fehlermeldung ?SYNTAX ERROR[1], allerdings ohne Zeilennummernangabe. Um diese Fehlermeldung zu vermeiden, sollte für das Einlesen stets Zeichenkettenvariablen genutzt werden.
Der GET#-Befehl kann nur innerhalb von BASIC-Programmen genutzt werden, ansonsten wird die BASIC-Fehlermeldung ?ILLEGAL DIRECT ERROR ausgegeben.
Es werden beim Einlesen alle Zeichen berücksichtigt. Eine Ausnahme ist die Verwendung des Befehls GET# auf dem Bildschirm. Nach jedem Lesevorgang auf das Bildschirmgerät wird der Cursor um eine Spalte nach rechts versetzt und das Ende einer logischen Bildschirmzeile (also nach 80 Zeichen) automatisch das RETURN-Zeichen CHR$(13) gesetzt.
Aus Dateien mittels GET# in Zeichenketten gelesenen Nullbytes entsprechen nicht wie zu erwarten einem CHR$(0), sondern einem Leerstring und müssen gegebenenfalls für die weitere Verwendung (z.B. mithilfe der Funktion ASC) gesondert behandelt werden (siehe Beispiel).
GET# ist im Gegensatz zu diversen anderen "#"-Befehlen in der Implementierung nicht mit einem eigenen Schlüsselwort bedacht, sondern es handelt sich um den GET-Behehl mit optionalem Parameter #<Dateinummer>
.
Beispiele[Bearbeiten | Quelltext bearbeiten]
Vom Bildschirm "einlesen"[Bearbeiten | Quelltext bearbeiten]
10 PRINT CHR$(19);: B$="": OPEN 1,3 20 FOR I=1 TO 255 30 GET#1,A$: B$=B$+A$ 40 NEXT 50 CLOSE 1 60 PRINT CHR$(147) B$
255 Bildschirmzeichen in einer Zeichenkette speichern.
Von Tastatur ähnlich GET einlesen[Bearbeiten | Quelltext bearbeiten]
100 OPEN 1,0 : REM GERAET 0 = TASTATUR 110 GET#1,A: IF A=0 GOTO 110 120 PRINT A; 130 GOTO 110
Kann nur Zeichen von 1 bis 9 einlesen! Das Zeichen "0" liefert den gleichen Wert wie bei keiner Eingabe und kann nicht davon unterschieden werden!
Die Zeichen ",", ".", "-", "+", "e" werden ignoriert (bzw. liefern auch 0), alle anderen lassen das Programm mit Fehler ?SYNTAX ERROR abbrechen.
Sequentielle Datei auf Diskette einlesen[Bearbeiten | Quelltext bearbeiten]
100 Z$=CHR$(0) 110 OPEN 1,8,2,"DATEN,S,R" 120 FOR C=0 TO 1 130 GET#1,A$ 140 PRINT ASC(A$+Z$); 150 C = ABS(ST) 160 NEXT 170 CLOSE 1
Die Zeichencodes der Zeichen aus der sequentiellen Datei "DATEN" werden der Reihe nach am Bildschirm ausgegeben. Die FOR-NEXT-Konstruktion sorgt für einen schnellen Programmlauf, da das zeichenweise Einlesen auf BASIC-Ebene ohnehin schon ein recht gemächlicher Vorgang ist.
Sequentielle Programmdatei[Bearbeiten | Quelltext bearbeiten]
In diesem Beispiel wird eine sequentiell gespeicherte Datei vom Typ "PRG" - hier ein Dokumentationstext von DotBASIC Plus aus der Loadstar #236 - gelesen und auf dem Bildschirm und auf dem Drucker ausgegeben. Da das Dateiformat nicht ganz einer seqentiellen Datei entspricht (z.B. ist das letzte Byte 00), kann man hier nicht INPUT# benutzen. Statt dessen wird mit GET# eingelesen und der Ausgabestring aus den Bytes zusammengesetzt.
100 PRINT CHR$(147)CHR$(14) 110 OPEN 2,8,2,"T.DOTINTRO,P,R" 120 OPEN 4,4,7 130 GOSUB210 140 IF FF>0 THEN PRINT FF,FF$:GOTO190 150 GET#2,A$,A$:REM STARTADRESSE 160 GET#2,A$ 170 IF A$=CHR$(13)THEN PRINT X$:PRINT#4,X$:X$="" 175 IF A$<>CHR$(13)THEN X$=X$+A$ 180 IF ST=0 THEN160 190 CLOSE2:CLOSE4:END 200 : 210 OPEN 1,8,15 220 INPUT#1,FF,FF$ 230 CLOSE 1 240 RETURN
Weitere Beispiele[Bearbeiten | Quelltext bearbeiten]
Siehe
Anmerkungen[Bearbeiten | Quelltext bearbeiten]
- ↑ Im Gegensatz zu INPUT# wird hier nicht die Fehlermeldung ?FILE DATA ERROR ausgegeben.
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