6. Reťazce: DIM, LEN, A$(i,j)
Na čo to je
Reťazec je premenná, ktorá nedrží číslo, ale text: meno, slovo, celú vetu. Spoznáš ju podľa znaku dolára na konci mena: NAME$.
Ako sa to píše
DIM meno$(dĺžka)
meno$="text"| Zápis | Význam |
|---|---|
DIM A$(20) | priprav reťazec A$, do ktorého sa zmestí najviac 20 znakov |
A$="text" | ulož text |
LEN(A$) | funkcia: koľko znakov v reťazci práve je |
A$(3) | časť reťazca od tretieho znaku do konca |
A$(2,4) | časť od druhého po štvrtý znak |
A$(2,2) | jeden znak, druhý |
A$(LEN(A$)+1)=B$ | pripoj B$ na koniec A$ |
Na rozdiel od čísla treba reťazec vopred ohlásiť príkazom DIM (z anglického dimension, rozmer). Počítač mu musí vyhradiť miesto a potrebuje vedieť koľko. Jeden DIM môže ohlásiť viac reťazcov, oddelených čiarkou.
Celý program
Súbor examples/strings.abas:
10 REM Strings: variables that hold text
20 DIM NAME$(20),GREETING$(40)
30 NAME$="Atari"
40 PRINT NAME$
50 PRINT "Length: ";LEN(NAME$)
60 PRINT "First letter: ";NAME$(1,1)
70 PRINT "Letters 2 to 4: ";NAME$(2,4)
80 PRINT "From the 3rd on: ";NAME$(3)
90 GREETING$="Hello, "
100 GREETING$(LEN(GREETING$)+1)=NAME$
110 PRINT GREETING$
120 NAME$(1,1)="a"
130 PRINT NAME$
140 DIM SHORT$(3)
150 SHORT$="ABCDEFGH"
160 PRINT SHORT$Preklad a spustenie
Basic26 strings.abas --simČo uvidíš
Atari
Length: 5
First letter: A
Letters 2 to 4: tar
From the 3rd on: ari
Hello, Atari
atari
ABCAko to funguje
- Riadok 20:
NAME$má miesto na 20 znakov,GREETING$na 40. To je najviac; koľko znakov v reťazci naozaj je, závisí od toho, čo doň uložíš. Hneď poDIMje prázdny aLENje 0. - Riadok 50: v
NAME$je päť znakov, hoci miesta je na dvadsať. - Riadky 60 až 80: znaky sa číslujú od jednotky.
NAME$(2,4)je druhý až štvrtý znak. S jedným číslom ide časť až do konca. - Riadok 100: Atari BASIC nemá znamienko na spájanie textov. Spája sa tak, že druhý text zapíšeš za koniec prvého:
GREETING$má 7 znakov, zápis začína na ôsmom mieste. - Riadok 120: zápis do časti reťazca prepíše len tú časť – tu prvé písmeno.
- Riadky 140 až 160: do reťazca sa zmestí len toľko, koľko povolil
DIM. Zvyšok sa bez hlásenia odreže: z ôsmich písmen ostali tri.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
reťazec bez DIM | preloží sa, ale za behu ERROR- 9 AT LINE 30 |
DIM toho istého reťazca dvakrát | error B26009: A$ is DIMensioned twice |
text dlhší než DIM | odreže sa, bez hlásenia |
čítanie za koncom textu (A$(7), keď LEN(A$) je 5) | ERROR- 5 AT LINE 20 |
zápis za hranicu z DIM (A$(9)="X" pri DIM A$(5)) | error B26005: A$(9) is past DIM A$(5) |
spájanie plusom (A$="AB"+"CD") | error B26042: a string cannot be used in an arithmetic expression |
chýba $ (NAME="Atari") | error B26042: expected a number – NAME bez dolára je číselná premenná |
A$ a A sú dve rôzne premenné: jedna na text, druhá na číslo. Môžu existovať naraz.
Pozor na pascu pri spájaní: A$(LEN(A$)+1)=B$ zapisuje za koniec A$. Ak je A$ už plný po DIM, zápis je mimo a program skončí chybou 5.
Vyskúšaj si
- Ulož do reťazca svoje meno a vypíš jeho posledné písmeno. (Je na mieste
LEN(NAME$).) - Zlož z dvoch reťazcov, mena a priezviska, tretí s medzerou medzi nimi.
- Vypíš prvé tri písmená slova, potom posledné tri.
Zhrnutie
- Reťazec má meno s
$a pred použitím potrebujeDIM meno$(najviac znakov). LEN(A$)je počet znakov, ktoré v ňom práve sú.A$(i,j)je časť odi-teho poj-ty znak,A$(i)odi-teho do konca; počíta sa od 1.- Spája sa zápisom za koniec:
A$(LEN(A$)+1)=B$. - Čo sa nezmestí, sa ticho odreže.
Späť: 5. Počítanie · Ďalej: 7. Vstup