24. Súbory: OPEN, CLOSE, PRINT #, INPUT #, GET, PUT, STATUS, NOTE, POINT, XIO, LPRINT
Na čo to je
Premenné žijú, len kým program beží. Čo má prežiť vypnutie počítača – tabuľka najlepších výsledkov, uložená hra, zoznam adries –, musí ísť do súboru na diskete.
Atari sa na disketu, klávesnicu, obrazovku aj tlačiareň pozerá rovnako: ako na zariadenie, z ktorého sa číta alebo do ktorého sa píše. Program si k zariadeniu otvorí kanál a ďalej už pracuje s číslom kanála.
Ako sa to píše
OPEN #kanál,režim,0,"zariadenie:meno"
PRINT #kanál;čo
INPUT #kanál,premenná
GET #kanál,premenná
PUT #kanál,hodnota
CLOSE #kanál| Časť | Význam |
|---|---|
kanál | číslo 1 až 7, ktoré si vyberieš; kanál 0 je obrazovka a klávesnica a je otvorený stále |
režim | 4 čítanie, 8 zápis (starý súbor sa prepíše), 9 pripísanie na koniec, 12 čítanie aj zápis |
0 | tretie číslo, takmer vždy nula |
"D:NOTES.TXT" | zariadenie a meno súboru |
Zariadenia:
| Meno | Čo to je |
|---|---|
D: | disketa (D1: prvá mechanika, D2: druhá) |
K: | klávesnica – znak po znaku, bez RETURN |
E: | editor: obrazovka a klávesnica po riadkoch |
S: | obrazovka |
P: | tlačiareň |
C: | kazeta |
Meno súboru na diskete má najviac 8 znakov, bodku a najviac 3 znaky prípony; len veľké písmená a číslice.
Príkazy:
| Príkaz | Čo robí |
|---|---|
PRINT #1;A$ | zapíše riadok textu (alebo číslo) do súboru |
INPUT #1,A$ | prečíta riadok |
PUT #1,65 | zapíše jeden bajt |
GET #1,K | prečíta jeden bajt do K |
CLOSE #1 | zavrie kanál – až teraz je súbor na diskete celý |
STATUS #1,S | do S dá stav kanála (1 je v poriadku) |
NOTE #1,S,B | zapamätá si miesto v súbore (sektor a bajt) |
POINT #1,S,B | vráti sa na zapamätané miesto |
XIO príkaz,#1,0,0,"D:MENO" | zvláštne operácie zariadenia: premenovať, zmazať, zamknúť |
LPRINT čo | vypíše riadok na tlačiareň, bez OPEN |
Celý program
Súbor examples/files.abas zapíše tri riadky do súboru a prečíta ich späť:
10 REM Files: writing and reading
20 DIM L$(40)
30 OPEN #1,8,0,"D:NOTES.TXT"
40 PRINT #1;"First line"
50 PRINT #1;"Second line"
60 PRINT #1;12345
70 CLOSE #1
80 OPEN #1,4,0,"D:NOTES.TXT"
90 TRAP 140
100 INPUT #1,L$
110 PRINT "Read: ";L$
120 GOTO 100
140 CLOSE #1
150 PRINT "End of the file, error ";PEEK(195)Preklad a spustenie
Simulátor má disketu D: len v pamäti – súbor v nej vydrží do konca behu, čo na vyskúšanie stačí:
Basic26 files.abas --simV emulátore potrebuje program skutočnú disketu a na nej DOS – program, ktorý na Atari s disketami pracuje. Voľba --atr vyrobí obraz diskety s DOS-om, uloží naň preložený program tak, aby sa po zapnutí spustil sám, a --run z tej diskety emulátor naštartuje:
Basic26 files.abas --atr files.atr --runViac o disketách je v kapitole 41.
Čo uvidíš
Read: First line
Read: Second line
Read: 12345
End of the file, error 136Ako to funguje
- Riadok 30: kanál 1 sa otvorí na zápis (režim 8). Ak súbor
NOTES.TXTexistuje, zmaže sa a začne odznova. - Riadky 40 až 60:
PRINT #1;píše do súboru presne to, čo byPRINTnapísal na obrazovku. Za#1je bodkočiarka (čiarka by vložila medzery ako na obrazovke). Číslo sa zapíše ako text. - Riadok 70:
CLOSEzapíše na disketu posledný kúsok dát a uvoľní kanál. Súbor, ktorý nezavrieš, je poškodený. Na konci programu (ENDalebo za posledným riadkom) zavrú kanály 1 až 7 oba interpretery aj preložený program; preložený navyše aj poSTOPa chybe. Kým však program beží – a hlavne keď ho niekto zastaví klávesom RESET –, súbor bezCLOSEcelý nie je. - Riadok 80: ten istý kanál, teraz na čítanie (režim 4).
- Riadok 100:
INPUT #1,L$číta riadok po riadku. - Riadok 90: program nevie, koľko riadkov v súbore je. Číta, kým to ide; pokus čítať za koniec je chyba 136 a pasca
TRAPju zachytí. To je bežný a správny spôsob, ako nájsť koniec súboru. - Riadok 140: aj po chybe treba kanál zavrieť.
Čísla v súbore
Číslo zapísané cez PRINT #1;N sa číta cez INPUT #1,N. Viac čísel na jednom riadku oddeľ čiarkou, ktorú zapíšeš sám: PRINT #1;A;",";B a potom INPUT #1,A,B.
Znak z klávesnice
Zariadenie K: vráti kód ATASCII stlačeného klávesu a čaká, kým nejaký príde – bez RETURN a bez toho, aby sa znak objavil na obrazovke:
10 OPEN #2,4,0,"K:"
20 PRINT "Press a key"
30 GET #2,K
40 PRINT "You pressed ";CHR$(K);" (code ";K;")"
50 CLOSE #2Na rozdiel od PEEK(764) z kapitoly 22 dostaneš skutočný znak.
Tlačiareň
LPRINT "text" pošle riadok na tlačiareň. Robí to isté ako OPEN #7,8,0,"P:", PRINT #7;"text", CLOSE #7. Emulátor tlač ukladá do súboru.
XIO: operácie so súbormi
| Príkaz | Čo robí |
|---|---|
XIO 32,#1,0,0,"D:OLD.TXT,NEW.TXT" | premenuje súbor |
XIO 33,#1,0,0,"D:NOTES.TXT" | zmaže súbor |
XIO 35,#1,0,0,"D:NOTES.TXT" | zamkne súbor proti zmazaniu |
XIO 36,#1,0,0,"D:NOTES.TXT" | odomkne |
Kanál za XIO musí byť zavretý. Tieto operácie robí DOS, takže ich skúšaj v emulátore s disketou, nie v simulátore. Turbo-BASIC XL má na ne obyčajné príkazy RENAME, DELETE, LOCK, UNLOCK a DIR (kapitola 37).
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
| súbor na čítanie neexistuje | ERROR- 170 AT LINE 80 |
| zariadenie neexistuje, alebo v emulátore chýba DOS | ERROR- 130 |
OPEN kanála, ktorý je už otvorený | ERROR- 129 |
PRINT #1 alebo INPUT #1 na neotvorenom kanáli | ERROR- 133 |
| čítanie za koncom súboru | ERROR- 136 |
| čítanie zo súboru otvoreného na zápis | ERROR- 131; opačne 135 |
| disketa je plná | ERROR- 162 |
chýba CLOSE po zápise | koniec súboru sa na disketu dostane až na konci programu; po RESET alebo vypnutí nikdy |
Chyby od 128 vyššie neprichádzajú z BASICu, ale z operačného systému a DOS-u. Všetky sú v prílohe C.
Vyskúšaj si
- Pripíš do
NOTES.TXTštvrtý riadok režimom 9 a prečítaj súbor znova. - Ulož do súboru desať čísel z poľa a prečítaj ich späť do iného poľa.
- Napíš program, ktorý sa spýta na meno a pri ďalšom spustení (v emulátore, s tou istou disketou) ťa ním pozdraví. Ak súbor ešte nie je, chybu 170 zachyť cez
TRAP.
Zhrnutie
OPEN #kanál,režim,0,"D:MENO"– režim 4 číta, 8 píše, 9 pripisuje.PRINT #aINPUT #pracujú s riadkami,PUT #aGET #s bajtmi.CLOSE #kanálpatrí za každý zápis; koniec programu kanály zavrie tiež, RESET nie.- Koniec súboru je chyba 136; zachytí sa cez
TRAP. - Program s disketou sa do emulátora dáva s
--atr disk.atr --run.
Späť: 23. Strojový kód · Ďalej: 25. Príkazy editora