PRINT(Raute)

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. PRINT (Begriffsklärung).
PRINT(Raute)
Format: PRINT#<logische Dateinummer>, [Ausdruck] [ [, | ;]<Ausdruck>]...
Parameter
<logische Dateinummer>: numerischer Ausdruck im Wertebereich von 0 bis 255
Ausdruck: beliebiger numerischer oder Zeichenkettenausdruck
Einordnung
Typ: Anweisung
Kontext: Ein/Ausgabe
Aufgabe: Ausgabe von Daten auf einen Ausgabekanal
Abkürzung: pR
Verwandte Befehle
CMD, PRINT, TAB, SPC

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl PRINT# unter BASIC V2 des Commodore 64.


Der BASIC-Befehl PRINT# dient zur Speicherung von Daten in einer Datei. Bevor der PRINT#-Befehl genutzt werden kann, muss die entsprechende Datei mit dem BASIC-Befehl OPEN geöffnet werden. Es muss bei der Benutzung von PRINT# die gleiche logische Dateinummer genutzt werden wie die im OPEN-Befehl angegebene.

Ein Ausdruck der Parameterangabe kann einen numerischen Wert oder eine Zeichenkette ergeben, doch für die Ausgabe werden die Ergebnisse in Zeichenketten umgewandelt, weshalb eine ausdrückliche Umwandlung von numerischen Ausdrücken (etwa numerische Variablen) in eine Zeichenkette (z.B. mit STR$) nicht mehr notwendig ist.

Als Trennzeichen für Ausdrücke bewirken Leerzeichen oder ein Semikolon (;) die nahtlose Aneinanderreihung der entsprechenden Werte.
Ein Komma (,) bewirkt das Einfügen von 10 Leerzeichen, sofern sich die Ausgabe nicht auf den Bildschirm bezieht, wo die Tabulatorfunktion einen Sprung an die nächste 10er-Spaltenposition führt.

Um die PRINT#-Ausgaben in Datenblöcke zu unterteilen und diese später mit INPUT# einlesen zu können, muss jeweils ein <RETURN>-Zeichen - CHR$(13) - gesetzt sein. Dies geschieht automatisch, außer wenn die PRINT#-Anweisung mit einem Komma (,), Semikolon (;) oder einer der Ausgabefunktionen SPC und TAB endet.

Ein Datensatz darf eine Länge von 88 Zeichen (exklusive <RETURN>-Zeichen) nicht überschreiten, damit dieser mittels INPUT# noch eingelesen werden kann. Andernfalls können die Daten nur noch mittels GET# zeichenweise eingelesen werden.

Sonderzeichen wie "," oder ";", die für INPUT# eine besondere Bedeutung haben, als Nutzdaten in der Datei, müssen mit Hilfe von Anführungszeichen per PRINT# geschrieben werden. Dabei muss die geschriebene Zeile mit einem Anführungszeichen, das geht nur in der Form CHR$(34), beginnen. Üblicherweise endet die Zeile auch mit dem Anführungszeichen, welches aber auch weggelassen werden kann.

Achtung: Die Abkürzung für PRINT# ist pR (P  SHIFT +R ), nicht ?# !!
Auch wenn in einem Programm nach LIST ein ?# als PRINT# erscheint, wird das Kommando so nicht richtig interpretiert - es wird wie ein PRINT # aufgefasst (mit Leerzeichen), also als syntaktisch falsches, normales PRINT, was dementsprechend in einem ?SYNTAX ERROR endet. Das hängt damit zusammen, dass im Speicher die Befehle des BASIC-Programms als Tokens gespeichert werden, nicht als ausgeschriebener Befehl, und dass die Tokens für PRINT und PRINT# unterschiedlich sind.


Beispiele[Bearbeiten]

Beispiel 1: Datei auf Datasette anlegen[Bearbeiten]

10 OPEN 1, 1, 1, "TESTDATEI"
20 PRINT#1,"1. Datensatz" 
30 PRINT#1,"2. Datensatz","(nach 10 Zeichen Abstand) wird fortgesetzt";
40 PRINT#1," wird noch fortgesetzt"
50 PRINT#1,"3. Datensatz"+CHR$(13);
60 PRINT#1,"4. Datensatz"
70 CLOSE 1

Schreiben (3. Parameter von OPEN, die Sekundäradresse ist 1) eines Datensatzdatei auf Datasette (zum Lesen siehe INPUT#).

Beispiel 2: Datei auf Floppy anlegen[Bearbeiten]

10 OPEN 2, 8, 4, "TESTDATEI,SEQ,W" 
20 PRINT#2,"1. Datensatz" 
30 PRINT#2,"2. Datensatz","(nach 10 Zeichen Abstand) wird fortgesetzt";
40 PRINT#2," wird noch fortgesetzt"
50 PRINT#2,"3. Datensatz"+CHR$(13);
60 PRINT#2,"4. Datensatz"
70 CLOSE 2

Schreiben einer sequentiellen Datei mit mehreren Datensätzen auf Diskette des 1. Diskettenlaufwerks (zum Lesen siehe INPUT#).

Beispiel 3: Programmdatei schreiben[Bearbeiten]

100 OFF=2049: SIZE=1000
110 OH=INT(OFF/256): OL=OFF-OH*256
120 OPEN 1,8,1,"TESTDATEI"
130 PRINT#1,CHR$(OL);CHR$(OH);:REM DIE ERSTEN ZWEI BYTES EINER PRG-DATEI - LADEADRESSE LO/HIGH-BYTE
140 FOR I=OFF TO OFF+SIZE-1
150 A$=CHR$(PEEK(I))
160 PRINT#1,A$;
170 NEXT I
180 CLOSE 1

Schreiben eines beliebigen Speicherbereichs (spezifiziert in Zeile 100, hier: BASIC-Start $0801/2049) in eine Datei. Hier speichert sich das Programm selbst ab (wie SAVE). Die Datei kann dann mit

LOAD "TESTDATEI",8,1

geladen werden.

Beispiel 4: Sonderzeichen schreiben[Bearbeiten]

100 OPEN 3,8,2,"TESTDATEI,S,W" 
110 PRINT#3,"ZEILE 1"
120 PRINT#3,CHR$(34)"ZEILE 2 MIT SONDERZEICHEN: ;,"CHR$(34)
130 PRINT#3,"ZEILE 3" 
140 CLOSE 3
199 REM JETZT EINLESEN ...
200 OPEN 3,8,2,"TESTDATEI,S,R"
230 FOR S=0 TO 1  : REM ENDLOSSCHLEIFE, SOLANGE S = 0 IST
240 INPUT#3,D$    : REM STRING EINLESEN
250 PRINT D$;     : REM DAS BYTE AUF DEM BILDSCHIRM AUSGEBEN
260 S=ABS(ST)     : REM S ist >0 WENN DATEIENDE ODER FEHLER
270 NEXT S        : REM ABBRUCH, WENN ST <> 0 WAR
280 CLOSE 3       : REM DATEI WIEDER SCHLIESSEN
290 IF ST=64 THEN PRINT "OK"
291 PRINT "STATUS:" 255 AND ST

Erstellt eine Datei mit Sonderzeichen in der 2. Zeile, die durch Einschließen in Anführungsstrichen (PETSCII-Code 34) so von INPUT# wieder gelesen werden kann. Im Anschluss wird der Inhalt dann ausgelesen und am Schirm angezeigt:

ZEILE 1
ZEILE 2 MIT SONDERZEICHEN: ;,
ZEILE 3
OK
STATUS: 64