INPUT(Raute)

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. INPUT (Begriffsklärung).


INPUT(Raute)
Format: 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
Verwandte Befehle
GET, GET#, INPUT

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 diesen je nach Trennzeichen den angegebenen Variablen zu. Der gesamte Eingabebereich ist auf eine maximale Länge von 88 Zeichen limitiert.

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.
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.

[Bearbeiten] Beispiele

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 3
60 PRINT CHR$(147);
70 FOR X=1 TO 24: PRINT A$(X): NEXT X
80 PRINT A$(25) CHR$(19)

Dieses Programm liest in den Zeilen 20-40 alle 25 Bildschirmzeilen in die indizierten Zeichenkettenvariablen A$(X) ein und gibt sie wieder aus.

10 OPEN 1, 1, 0, "TESTDATEI"
20 INPUT#1, A$(1)
30 INPUT#1, B$, C$, D$
40 CLOSE 1

Liest Datensätze aus einer Datei auf Datasette (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

Liest Datensätze aus einer Datei auf Diskette des 1. Diskettenlaufwerks (zum Schreiben siehe PRINT#).

10 OPEN 1,0
20 INPUT#1,A$
30 PRINT A$
40 CLOSE 1

Bildschirm als Gerät öffnen und von dort einlesen. Damit wird der sonst bei INPUT übliche Prompt oder die Warnung ?EXTRA IGNORED nicht angezeigt. Z.B.

RUN
0123456789012345678901234567890123456789
ABC,DEF 01234567890123456789012345678901
23456789ABC

READY.

bei Eingabe der Zeichenfolge 0123456789012345678901234567890123456789ABC.

In anderen Sprachen