7.10 Nog meer over unstring

Bij de unstring-opdracht is de delimited-by-clausule niet verplicht. Als er geen scheiding is opgegeven, vult de computer alle velden achtereenvolgend. Het is moeilijk om hiervoor een zinvol voorbeeld te verzinnen. Daarom volgt nu een nonsensvoorbeeld.

In dit voorbeeld ontbreekt delimited by. Nieuw in dit voorbeeld is tallying, dat we kunnen gebruiken om het aantal velden te tellen waarin de unstring-opdracht een resultaat heeft geplaatst.

01 zin        pic x(20), value "naderekolagenudiruba".
01 twee       pic x(02).
01 vier       pic x(04).
01 zes        pic x(06).
01 acht       pic x(08).
01 veldteller pic 9.
01 startpunt  pic 9.

    move zero to veldteller
    accept startpunt
    unstring zin into twee vier zes acht
        with pointer startpunt
        tallying in veldteller
  

onthoud

De computer verhoogt het veld achter tallying met één, telkens als er een veld is afgehandeld gedurende de unstring-opdracht. De computer zet het veld niet vooraf op nul, dat moeten we, indien nodig, zelf doen.

In het voorbeeld krijgt de variabele veldteller de initiële waarde nul. Daarna volgt een accept-opdracht waarmee de variabele startpunt een waarde krijgt.
Stel dat de invoer 4 is. Wat is dan het resultaat? Het losmaken van tekens begint op positie 4 van de variabele zin. Alle velden worden volledig gevuld omdat er geen scheidingstekens in de opdracht zijn genoemd. Twee wordt er; vier wordt ekol, zes wordt agenud en acht wordt iruba*** (* is spatie). De veldteller staat op 4 want er zijn vier velden door de unstring behandeld.

Stel nu dat de invoer 9 bedraagt. Wat is dan het resultaat? Twee wordt la, vier wordt genu, zes wordt diruba en acht blijft ongewijzigd. De veldteller staat op 3 want er zijn drie velden behandeld. Toen het veld acht aan de beurt was, waren alle tekens al op.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo