14. Dáta v programe: DATA, READ, RESTORE
Na čo to je
Program často potrebuje zoznam hodnôt, ktoré sa nemenia: mená mesiacov, noty melódie, body obrázka. Namiesto dvadsiatich riadkov A(0)=12:A(1)=14… ich napíšeš za sebou do riadkov DATA a program si ich po jednej číta.
Ako sa to píše
DATA hodnota,hodnota,hodnota
READ premenná,premenná
RESTORE
RESTORE číslo riadka| Slovo | Význam |
|---|---|
DATA | zoznam hodnôt oddelených čiarkami; sám nič nerobí, len ich drží |
READ A | vezmi ďalšiu hodnotu zo zoznamu a ulož ju do A |
RESTORE | začni čítať znova od prvého DATA v programe |
RESTORE n | pokračuj čítaním od DATA na riadku n |
Všetky DATA v programe tvoria jeden dlhý zoznam v poradí čísel riadkov. Program si pamätá, pokiaľ dočítal; každý READ vezme ďalšiu hodnotu.
Celý program
Súbor examples/data.abas:
10 REM DATA: values written in the program
20 DIM NAME$(10)
30 FOR I=1 TO 4
40 READ NAME$,AGE
50 PRINT NAME$;" is ";AGE
60 NEXT I
70 RESTORE 1010
80 READ NAME$,AGE
90 PRINT "Again: ";NAME$
100 END
1000 DATA Anna,12
1010 DATA Boris,15,Cyril,9
1020 DATA Dana,11Preklad a spustenie
Basic26 data.abas --simČo uvidíš
Anna is 12
Boris is 15
Cyril is 9
Dana is 11
Again: BorisAko to funguje
- Riadok 40: jeden
READvezme dve hodnoty za sebou – text doNAME$a číslo doAGE. Štyri prechody slučky prečítajú osem hodnôt. - Riadky 1000 až 1020: na tom, ako sú hodnoty rozdelené do riadkov, nezáleží. Riadok 1010 má dve dvojice, ostatné po jednej;
READide jednoducho ďalej. - Text v
DATAsa píše bez úvodzoviek. Všetko medzi čiarkami je hodnota tak, ako je – vrátane medzier. Preto text vDATAnemôže obsahovať čiarku. - Riadok 70:
RESTORE 1010vráti čítanie na začiatok riadka 1010, takže ďalšíREADdostane Borisa. - Riadok 100:
ENDtu nie je nutný –DATAsa nevykonáva, program cez ne prejde bez účinku. Zvykom je však dávať dáta na koniec, zaEND.
Typický vzor: naplnenie poľa
10 DIM TEMP(6)
20 FOR D=0 TO 6:READ X:TEMP(D)=X:NEXT D
30 DATA 12,14,11,17,19,16,13Číta sa do pomocnej premennej X a tá sa uloží do poľa. Tak sa v kapitole 13 dali nahradiť dva riadky priradení.
Koniec zoznamu značkou
Keď nechceš počítať, koľko hodnôt v DATA je, daj na koniec hodnotu, ktorá sa inak nevyskytne, a čítaj, kým na ňu nenarazíš:
10 READ X
20 IF X=-1 THEN END
30 PRINT X
40 GOTO 10
50 DATA 5,8,13,21,-1Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
READ a žiadne hodnoty už nie sú | ERROR- 6 AT LINE 40 |
do číselnej premennej príde text (READ A a v dátach Anna) | ERROR- 8 |
poradie v READ nesedí s poradím v DATA | chyba 8, alebo sa číslo načíta ako text – program beží, ale s nezmyslami |
text v úvodzovkách (DATA "Anna") | úvodzovky sa stanú súčasťou textu |
medzera za čiarkou (DATA Anna, Boris) | druhé meno sa začína medzerou |
RESTORE na riadok, za ktorým už žiadne DATA nie sú | error B26006: there is no DATA at or after line 500 |
Vyskúšaj si
- Pridaj do
DATApiatu osobu a uprav slučku. - Prečítaj z
DATAdesať čísel a vypíš ich súčet. - Napíš program, ktorý sa spýta na číslo mesiaca a z
DATAvypíše jeho meno. (Čítaj mená v slučke a zastav sa pri správnom.)
Zhrnutie
DATAdrží hodnoty,READich číta jednu po druhej.- Všetky
DATAv programe sú jeden zoznam v poradí riadkov. RESTOREvráti čítanie na začiatok,RESTORE nna riadokn.- Text v
DATAje bez úvodzoviek a bez čiarok. - Čítanie za koniec je chyba 6.
Späť: 13. Polia · Ďalej: 15. Znaky a čísla