|
Strings en Tabellen
Een beschrijving van de string
Een string is een groepje karakters uit de tekenset van de computer, meestal letters,
cijfers en leestekens.
Om computeruitvoer zinvol te kunnen presenteren aan gebruikers, moeten de
interne gegevens vertaald worden naar teksten.
Als programmeur wil je op niet al te omslachtige wijze met teksten en de
opmaak daarvan kunnen werken.
Eigenlijk werk je al vanaf het eerste begin met teksten. Het Hello
World programma uit Hoofdstuk 1, "De eerste stap" bevat de string
"Hello, world...".
Functies die met strings werken, zullen alle teken voor teken uit de
string behandelen tot het einde van de string. Dit kunnen functies
zijn voor bijvoorbeeld vergelijken, afdrukken of kopiëren.
Een tabel is een aaneengesloten stuk met gegevens die alle van
hetzelfde type zijn. Dit type kan een complex type zijn, zoals we
zullen zien als we de structuren gaan behandelen. Een string is dus
een bijzonder geval van een tabel, een tabel van karakters.
De beste manier om dit te begrijpen is door middel van voorbeelden.
Bestudeer daarom eens programma CHARSTR.rex. Er wordt gebruik gemaakt
van de variabele TITEL als Stringtabel van karakters.
/* REXX */
TITEL = 'Yahtzee'
Say 'De naam van het spel is "'TITEL'"'
Say 'Een letter uit de naam is "'Substr(TITEL,3,1)'"'
Say 'Een deel van de naam is "'Substr(TITEL,4)'"'
Exit 0
In de
programmeertaal REXX is het eerste element van een tabel het element met
subscript 1, het tweede element heeft subscript 2 en zo verder. Het
laatste element heeft als subscript het aantal elementen van de tabel,
in dit geval dus 7. De Stringtabel heeft dus 7 elementen.
Toepassing van strings
De variabele TITEL is dus een string met een grootte van 7
karakters. Er worden de zeven letters van het woord Yahtzee
in de string geplaatst. De string kan worden afgedrukt, tezamen
met wat andere tekst middels Say.
De tweede Say laat zien dat het mogelijk is om met
behulp van de Substr functie en de referentie naar het
specifieke element een enkel teken uit een string af te drukken. De
laatste Say laat zien hoe je een deel van een string
kunt afdrukken. Dit doe je door het element, waar het afdrukken moet
beginnen, te benoemen middels zijn index.
Het voorbeeld zou je het idee kunnen geven dat omgaan met strings in REXX
nogal omslachtig is, omdat je strings teken voor teken moet behandelen.
Niets is minder waar, zoals we in het volgende programma zullen zien.
Compileer en test nu eerst dit programma.
String functies
Bestudeer het programma STRINGS.rex om te zien hoe in REXX met strings kan
worden omgegaan. Eerst worden twee string gedeclareerd, waarmee kan
worden gewerkt.
/* REXX */
SPEL1 = 'E N E N'
SPEL2 = 'T W E E E N'
Say 'De naam van het eerste spel is: "'SPEL1'"'
Say 'De naam van het tweede spel is: "'SPEL2'"'
If (SPEL1 > SPEL2) Then
Say 'Bij vergelijking van de namen is de grootste: "'SPEL1'"'
Else
Say 'Bij vergelijking van de namen is de grootste: "'SPEL2'"'
SPEL1 = 'THREE '
SPEL1 = SPEL1||'OF A '
SPEL1 = SPEL1||'KIND'
Say 'De naam van een spel is: "'SPEL1'"'
Exit 0
In de voorbeelden wordt E N E N toegekend aan
SPEL1 en T W E E E N aan SPEL2.
Beide teksten worden afgedrukt.
We kunnen strings ook met elkaar vergelijken.
De derde Say laat dit
zien. Een T is groter dan een E dus zal
T W E E E N worden afgedrukt.
Denk eraan dat grote en kleine letters verschil maken. Een
a is groter dan een Z!
De laatste vier statements laten zien hoe in REXX een string uit delen kan
worden opgebouwd. De bibliotheek bevat daartoe de ||
functie, de string concatenation. Deze functie plakt als het ware de
ene string achter de andere. In het voorbeeld wordt SPEL1 als
volgt opgebouwd: De tekst THREE wordt gekopieerd
en staat dus vooraan. Vervolgens wordt de tekst OF A
er aan vast geplakt. Tenslotte wordt de tekst KIND er aan vast
geplakt. Het resultaat, THREE OF A KIND wordt afgedrukt.
Strings zijn niet moeilijk toe te passen en bijzonder handig. Besteed
wat tijd om er mee vertrouwd te raken. Compileer en test dan dit
programma en verklaar voor jezelf de resultaten.
Numerieke tabellen
Bestudeer het programma TABELINT.rex. Het bevat een voorbeeld van een
tabel van integers. Merk op dat de tabel gedeclareerd wordt door de naam
van de tabel en de elementen te scheiden door een punt.
/* REXX */
Do i=1 To 12
WAARDE.i = 3 * i + 5
End
Do i=1 To 12
Say 'De waarde van element 'Right(i,2)' is 'Right(WAARDE.i,2)
End
Exit 0
We hebben hier 12 integer variabelen om mee te werken. De namen van de
variabelen zijn WAARDE.1, WAARDE.2 enzovoort tot en met
WAARDE.12. Binnen een for lus krijgt ieder van
deze variabelen een fantasie waarde. Een tweede iteratie drukt de
toegekende waarden af ter controle. Als je al het vorige begrepen hebt,
zal dit programma geen probleem voor je zijn. Compileer en test het nu.
Evenzo kun je tabellen declareren met floating point variabelen.
Bestudeer het programma TABEL.rex voor een voorbeeld.
/* REXX */ TITEL = 'Yahtzee - pc3270' Do i=1 To 12 PUNTEN.i = i *
30 ZOMAAR.i = 12.345 * (i + 23) End Say TITEL Do i=1 To 12 Say 'Spel 'Right(i,2)':
'Right(PUNTEN.i,4)' ('ZOMAAR.i')' End Exit 0 Verder bevat het programma
geen nieuwe zaken. Ook hier krijgen de variabelen fantasie waarden en wordt
alles ter controle afgedrukt. Compileer en test dit programma.
Meerdimensionale tabellen
Bestudeer nu het programma VAKJES.rex waarin opgenomen een
tweedimensionale tabel. Deze tabel wordt ook gebruikt in het totaal
programma YAHTZEE.rex.
/* REXX */
Do K=1 To 3 /* Vul de tabel */
Do S=1 To 13
VAKJE.K.S = K * 100 + S
End
End
VAKJE.2.6 = -1; /* verander een specifieke */
VAKJE.2.2 = VAKJE.2.6 /* kopieeer een vakje */
Do S=1 To 13 /* Druk de tabel af */
Call CharOut,'Spel 'Right(S,2)':'
Do K=1 To 3
Call CharOut,Right(VAKJE.K.S,8)
End
Say
End
Exit 0
De variabele VAKJES is een tweedimensionale tabel, bestaande
uit 3 kolommen van elk 13 spelen (integers), in totaal dus 39 integers.
Het eerste element is VAKJE.1.1, het
laatste is VAKJE.3.13. De tabel wordt
gevuld met getallen, kolom 1 met honderdtallen, kolom 2 met
tweehonderdtallen en kolom3 met driehonderdtallen. Twee willekeurige
elementen krijgen nog een bijzondere waarde, om te laten zien hoe een
individueel element kan worden aangewezen.
De tabel wordt in zijn geheel afgedrukt. In dit programma is er voor
gekozen het subscript en de plaats die een vakje op het scherm inneemt
1:1 te houden. |