INPUT(Raute)
| INPUT(Raute) | |
| Syntax: | INPUT#<Dateinummer>,<Variable>[,<Variable>...] |
| Parameter | |
| <Dateinummer>: Nummer eines zum Lesen geöffneten Datenkanals | |
| <Variable>: Variable passenden Typs zur Übernahme der eingelesenen Daten | |
| Einordnung | |
| Typ: | Anweisung |
| Kontext: | Ein-/Ausgabe |
| Aufgabe: | Daten von einem Eingabekanal lesen |
| Abkürzung: | iN |
| Token: | $84 (132) |
| Verwandte Befehle | |
| GET, GET#, INPUT, PRINT# | |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl INPUT# unter BASIC V2 des Commodore 64.
Der BASIC-Befehl INPUT# dient zum Einlesen von Daten aus einem Peripheriegerät wie etwa dem Datasetten- oder Diskettenlaufwerk innerhalb von BASIC-Programmen. Im Gegensatz zum BASIC-Befehl GET# liest INPUT# Dateninhalte als Zeichenfolge ein (also nicht als Einzelzeichen) und ordnet diese je nach Trennzeichen den angegebenen Variablen zu. Der gesamte Eingabebereich ist auf eine Länge von 88 Zeichen beschränkt.
Aufgrund zahlreicher Einschränkungen und Eigenheiten (siehe auch INPUT) ist INPUT# nur eingeschränkt sinnvoll einsetzbar. Im Allgemeinen empfiehlt es sich, stattdessen GET# zu benutzen.
Allgemeines[Bearbeiten | Quelltext bearbeiten]
Bevor der Befehl genutzt werden kann, muss mit dem BASIC-Befehl OPEN ein Kanal zum entsprechenden Gerät geöffnet werden. Entspricht die im INPUT#-Befehl angegebene Dateinummer keiner geöffneten Datei, führt dies zu einem Programmabbruch mit der Fehlermeldung ?FILE NOT OPEN (auch im Fall der an sich nicht verwendbaren Dateinummer 0). Die Dateinummer muss zwischen 1 und 255 liegen, sonst wird der BASIC-Fehler ?ILLEGAL QUANTITY ERROR gemeldet.
Der Datensatz für eine Variable (Zeichenketten- oder Zahlenvariablen) ist jeweils beendet, wenn eines der Trennzeichen
- Komma (,),
- Semikolon (;),
- Doppelpunkt (:) oder das
- RETURN-Zeichen - CHR$(13)
vorkommt. Diese Zeichen fungieren hier als reine Steuerzeichen und sind nicht Bestandteil der eigentlichen Daten. Nach dem Einlesen ist nicht mehr feststellbar, welches konkrete Trennzeichen tatsächlich vorlag, da die Trennzeichen selbst nicht durchgereicht werden.
Wenn die einzulesende Zeile mit einem Anführungszeichen (") bzw. CHR$(34) beginnt, werden auch die oben genannten Sonderzeichen ":,;" als normale Zeichen behandelt und eingelesen. Dann muss die Zeile mit einem Anführungszeichen oder einem RETURN-Zeichen enden. Falls auf dieses noch weitere Zeichen (abgesehen von obigen Sonderzeichen) folgen, wird der Befehl mit dem Fehler ?FILE DATA ERROR abgebrochen.
Es können auch über INPUT# die am Bildschirm dargestellten Zeichen eingelesen werden. Dabei wird jede logische Bildschirmzeile (max. 80 Zeichen bzw. bis oben genannte Abbruchbedingungen vorliegen) eingelesen. Nach jeder eingelesenen Zeile wird automatisch der Cursor eine Position weiter nach dem Ende der logischen Zeile positioniert (siehe auch Beispiele).
Fallstricke[Bearbeiten | Quelltext bearbeiten]
- Falls die eingelesenen Daten bei einer Zahlenvariable syntaktisch nicht einem Zahlenwert entsprechen, erscheint die BASIC-Fehlermeldung ?BAD DATA ERROR. Um dies zu vermeiden, sollten für das Einlesen nur Zeichenkettenvariablen genutzt werden.
- Überschreitet der Eingabebereich für den INPUT#-Befehl 88 Zeichen für alle angegebenen Variablen und Trennzeichen, so wird die BASIC-Fehlermeldung ?STRING TOO LONG ERROR angezeigt, was eigentlich einen Überlauf des internen INPUT-Puffers signalisiert und nichts mit den Variablen selbst zu tun hat.
- Falls der INPUT#-Befehl nicht innerhalb von BASIC-Programmen verwendet wird, erscheint die BASIC-Fehlermeldung ?ILLEGAL DIRECT ERROR.
- Vorsicht: Endet die einzulesende Datei mit zwei oder mehr aufeinander folgenden RETURN-Zeichen (CHR$(13)), bleibt INPUT# hängen und das Programm kann nur noch mit einem Warmstart beendet werden. (Innerhalb einer Datei, also nicht am Dateiende auftretende Folgen von RETURN-Zeichen stellen hingegen kein Problem dar: INPUT# berücksichtigt dann nur das erste RETURN-Zeichen und überspringt den Rest.)
Beispiele[Bearbeiten | Quelltext bearbeiten]
Bildschirmzeilen in String-Array einlesen[Bearbeiten | Quelltext bearbeiten]
Dieses Programm liest in den Zeilen 20-40 alle 25 Bildschirmzeilen in die indizierten Zeichenkettenvariablen A$(X) ein und gibt sie wieder aus.
10 DIM A$(25) 20 PRINT CHR$(19); : REM HOME-BILDSCHIRMPOSITION 30 OPEN 1,3 : REM BILDSCHIRM GERAET 40 FOR X=1 TO 25: INPUT#1,A$(X): NEXT X 50 CLOSE 1 60 PRINT CHR$(147); 70 FOR X=1 TO 24: PRINT A$(X): NEXT X 80 PRINT A$(25) CHR$(19)
Achtung: Wie bei INPUT üblich gelten hierbei zahlreiche Einschränkungen, z.B. werden pro Zeile führende Leerzeichen sowie Doppelpunkte und ihnen nachfolgende Zeichen ignoriert.
Lesen von Datasette[Bearbeiten | Quelltext bearbeiten]
Dieses Programm liest Datensätze aus einer Datei auf Datasette (zum Schreiben siehe PRINT#).
10 OPEN 1, 1, 0, "TESTDATEI" 20 INPUT#1, A$(1) 30 INPUT#1, B$, C$, D$ 40 CLOSE 1
Lesen von Diskette[Bearbeiten | Quelltext bearbeiten]
Das folgende Programm liest Datensätze aus einer Datei auf Diskette des 1. Diskettenlaufwerks (zum Schreiben siehe PRINT#).
10 OPEN 2, 8, 4, "TESTDATEI,SEQ,R" 20 INPUT#2, A$(1) 30 INPUT#2, B$, C$, D$ 40 CLOSE 2
Lesen vom Bildschirm als Gerät[Bearbeiten | Quelltext bearbeiten]
Folgendes Programm öffnet den Bildschirm als Gerät und liest dieses aus. Damit wird der sonst bei INPUT übliche Prompt oder die Warnung ?EXTRA IGNORED nicht angezeigt.
10 OPEN 1,0 20 INPUT#1,A$ 30 PRINT A$ 40 CLOSE 1
Bei einer Eingabe der Zeichenfolge 0123456789012345678901234567890123456789ABC,DEF mit abschließendem RETURN (das Komma produziert nicht die sonst übliche Meldung, der Abschluss der Eingabe bewirkt zudem keinen Zeilenvorschub, weshalb die Ausgabe unmittelbar anschließt)
RUN 0123456789012345678901234567890123456789 ABC,DEF 01234567890123456789012345678901 23456789ABC READY. |
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