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.
Typ: Anweisung Syntax: INPUT#<Dateinummer>,<Variable>[,<Variable>...]
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 diesen je nach Trennzeichen den angegebenen Variablen zu. Der gesamte Eingabebereich ist auf eine maximale Länge von 88 Zeichen limitiert.
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 einen Kanal zum entsprechenden Gerät geöffnet werden und dabei die entsprechende logische Dateinummer des OPEN-Befehls genutzt werden. Ist die angegebene 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.
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 sind Bestandteil der Daten selbst und können nur innerhalb von Anführungszeichen ("") als String in diese gelangen. Nach dem Einlesen ist nicht mehr feststellbar, welches konkrete Trennzeichen tatsächlich vorlag, da diese nicht durchgereicht werden.
Wenn in der einzulesenden Zeile mit einem Anführungszeichen (") also CHR$(34) beginnt, können auch die obigen Sonderzeichen ":,;" enthalten sein. Allerdings muss die Zeile mit einem Anführungszeichen oder einem RETURN-Zeichen enden. Falls aber 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).
Falls die eingelesenen Daten bei einer Zahlenvariable syntaktisch nicht einem Zahlenwert entspricht, erscheint die BASIC-Fehlermeldung ?BAD DATA ERROR. Um diese BASIC-Fehlermeldung 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 inklusive 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.
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