PRINT(Raute)
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
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