PRINT(Raute)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. PRINT (Begriffsklärung).
PRINT(Raute)
Syntax: 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
Token: $98 (152)
Verwandte Befehle
CMD, PRINT, TAB, SPC

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

Typ: Anweisung	
Syntax: PRINT#<logische Dateinummer>, [Ausdruck] [ [, | ;]<Ausdruck>]...

Der BASIC-Befehl PRINT# dient zur Ausgabe von Daten auf ein zuvor mit dem BASIC-Befehl OPEN bestimmtes Gerät. Dabei muss PRINT# die gleiche logische Dateinummer benutzen, die im OPEN-Befehl angegeben wurde. Typische Anwendungen sind die Ausgabe in eine Datei oder auf einen Drucker.

Allgemeines[Bearbeiten | Quelltext bearbeiten]

Der Parameter Ausdruck 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 notwendig ist.

Als Trennzeichen für Ausdrücke bewirken Leerzeichen oder ein Semikolon (;) die nahtlose Aneinanderreihung der entsprechenden Werte.
Ein Komma (,) verursacht das Einfügen von 10 Leerzeichen, sofern sich die Ausgabe nicht auf den Bildschirm (Gerät 3) bezieht, wo die Tabulatorfunktion Leerzeichen bis zur nächsten 10er-Spaltenposition einfügt.

Beim Schreiben in Dateien ist zu beachten:

  • Um die PRINT#-Ausgaben in Datensätze zu unterteilen und diese später mit INPUT# einlesen zu können, muss jeder Datensatz mit einem <RETURN>-Zeichen CHR$(13) enden, das von PRINT# automatisch geschrieben wird, 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 kann man die Daten nur noch mittels GET# zeichenweise lesen.
  • Sonderzeichen wie "," oder ";", die für INPUT# eine besondere Bedeutung als Nutzdaten in der Datei haben, müssen mit Hilfe von Anführungszeichen per PRINT# geschrieben werden. Dabei muss die geschriebene Zeile mit CHR$(34) beginnen. Üblicherweise endet die Zeile auch mit dem Anführungszeichen, welches aber auch weggelassen werden kann. Siehe dazu Beispiel 4.

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 | Quelltext bearbeiten]

Beispiel 1: Datei auf Datasette anlegen[Bearbeiten | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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


Beispiel 5: Ausgabe auf Drucker[Bearbeiten | Quelltext bearbeiten]

Das folgende Programm gibt eine Liste der BASIC-Token und Befehle auf dem Drucker aus.
Als Vorlage diente das Programm "Interpretercodetabelle" von Dieter Temme aus der 64'er 11/1984 S.90.

100 OPEN 4,4:PRINT CHR$(147)
110 PRINT#4," TOKEN  BEFEHL"
120 T=127:B=41118:REM $A09E
130 T=T+1
140 IF T=204 THEN 210
150 PRINT CHR$(19)T
160 PRINT#4,T;SPC(3);
170 PRINT#4,CHR$(PEEK(B) AND 127);
180 B=B+1
190 IF PEEK(B-1)<128 THEN 170
200 PRINT#4,:GOTO 130
210 PRINT#4,:CLOSE4:END

Beispiel 6: Ausgabe auf Bildschirm[Bearbeiten | Quelltext bearbeiten]

Beispiel aus TAB: Mit Leerzeichen positionieren