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

Atari BASIC
DIM meno$(dĺžka)
meno$="text"
ZápisVý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:

Atari BASIC
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
ABC

Ako to funguje

Časté chyby

Čo sa staloČo sa stane
reťazec bez DIMpreloží sa, ale za behu ERROR- 9 AT LINE 30
DIM toho istého reťazca dvakráterror B26009: A$ is DIMensioned twice
text dlhší než DIModrež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

  1. Ulož do reťazca svoje meno a vypíš jeho posledné písmeno. (Je na mieste LEN(NAME$).)
  2. Zlož z dvoch reťazcov, mena a priezviska, tretí s medzerou medzi nimi.
  3. Vypíš prvé tri písmená slova, potom posledné tri.

Zhrnutie

Späť: 5. Počítanie · Ďalej: 7. Vstup