32. Hľadanie v texte a klávesy: INSTR, UINSTR, INKEY$, GET

Na čo to je

Dve veci, ktoré v Atari BASICu chýbali: zistiť, či a kde sa v texte nachádza iný text, a prečítať kláves bez čakania a bez otvárania kanála.

Ako sa to píše

ZápisČo vráti
INSTR(A$,B$)miesto, kde sa v A$ prvýkrát začína B$; 0, keď tam nie je
INSTR(A$,B$,N)to isté, ale hľadá až od N-tého znaku
UINSTR(A$,B$)ako INSTR, ale nerozlišuje veľké a malé písmená
INKEY$znak práve stlačeného klávesu; prázdny text, keď nie je stlačené nič
GET Kpočká na kláves a jeho kód ATASCII uloží do K

Celý program

Súbor examples/instr.tbas:

Turbo Basic XL
10 REM INSTR and UINSTR: looking for a text in a text
20 DIM A$(40)
30 A$="The quick brown fox"
40 PRINT "quick is at ";INSTR(A$,"quick")
50 PRINT "QUICK is at ";INSTR(A$,"QUICK")
60 PRINT "QUICK without case is at ";UINSTR(A$,"QUICK")
70 PRINT "The first o is at ";INSTR(A$,"o")
80 PRINT "The next o is at ";INSTR(A$,"o",14)
90 PRINT "cat is at ";INSTR(A$,"cat")
100 REM Cut the text into words
110 P=1
120 REPEAT
130   S=INSTR(A$," ",P)
140   IF S=0 THEN S=LEN(A$)+1
150   PRINT A$(P,S-1)
160   P=S+1
170 UNTIL P>LEN(A$)

Preklad a spustenie

Basic26 instr.tbas --sim

Čo uvidíš

quick is at 5
QUICK is at 0
QUICK without case is at 5
The first o is at 13
The next o is at 18
cat is at 0
The
quick
brown
fox

Ako to funguje

Klávesy

Súbor examples/keys.tbas je pre emulátor:

Turbo Basic XL
10 REM INKEY$ and GET: keys without RETURN
20 DIM K$(1)
30 PRINT "Press keys, Q ends"
40 DO
50   K$=INKEY$
60   IF K$<>""
70     PRINT K$;" has the code ";ASC(K$)
80     IF K$="Q" THEN EXIT
90   ENDIF
100 LOOP
110 PRINT "One more key to finish"
120 GET K
130 PRINT "It was ";CHR$(K)
Basic26 keys.tbas --run

V Atari BASICu bolo na to isté treba otvoriť kanál na zariadenie K: (kapitola 24).

Opačným smerom funguje PUT bez kanála: PUT 65,66 vypíše na obrazovku znaky s kódmi 65 a 66, teda AB.

Časté chyby

Čo sa staloČo sa stane
hľadané slovo má iné veľké a malé písmenáINSTR vráti 0; použi UINSTR
IF INSTR(…)=1 namiesto <>0platí, len keď je text na samom začiatku
INKEY$ do reťazca bez DIMERROR- 9
slučka s INKEY$ nič iné nerobífunguje, ale GET je na čakanie jednoduchší
GET K v simulátoreERROR- 136 – klávesnica tam nie je

Vyskúšaj si

  1. Spýtaj sa na vetu a slovo a vypíš, či veta slovo obsahuje.
  2. Spočítaj, koľkokrát sa vo vete nachádza písmeno e (INSTR s tretím číslom v slučke).
  3. Uprav joystick.abas z kapitoly 22 na ovládanie klávesmi W, A, S, D cez INKEY$.

Zhrnutie

Späť: 31. Celé čísla a bity · Ďalej: 33. Čas