In de paragrafen 3.4 en 3.5 ontdekten we het gemak van een opgemaakt veld. Door het plaatsen van een Z, een punt of een minteken in de picture-string van een variabele kunnen we de uitvoer verfraaien:
- de Z zorgt voor het onderdrukken van voorloopnullen;
- de punt levert een punt op de plaats van de decimaalaanduiding;
- met een minteken kunnen we zichtbaar maken dat een getal
positief of negatief is.
Daarmee zijn de mogelijkheden voor opgemaakte velden nog lang niet uitgeput. In deze paragraaf gaat het om tekens die in een veld op een vaste plaats staan. Het betreft de schuine streep, de nul, de komma, en de spatie. Als eerste voorbeeld nemen we de schuine streep (/).
In de working-storage section van een programma komt de volgende veldbeschrijving voor:
01 datum picture 99/99/99.
Dit is een veld van acht posities lang. Zes van de acht zijn bestemd voor cijfers (dat zijn de gebruikelijke negens in de picture-string). Verder zijn er twee schuine strepen.
onthoud
Een schuine streep in een picture-string betekent: als er iets naar dit veld wordt overgebracht, dan moet op die plaats een schuine streep staan.
Stel dat het vandaag 1 april 1999 is. We geven de opdracht:
accept datum from date
De computer brengt de zes cijfers vanuit de computerdatum over naar het veld datum maar houdt rekening met de opmaak. De inhoud van het veld datum zal dan zijn: 99/04/01. Deze mogelijkheid kan flink wat extra werk besparen (zie opgave 4.12 in het werkboek).
onthoud
Een nul in de picture van een veld levert een nul op die plaats op.
Een toepassing daarvan is het aanvullen van een bedrag in guldens met twee nullen:
01 geldbedrag picture ZZZZ9.00
Na de opdracht
move 123 to geldbedrag
bevat het veld twee nullen (zie figuur 4.1):
Figuur 4.1 Geldbedrag
Er staan twee nullen in het veld. Die nullen staan er niet van tevoren in. De computer zet ze pas in dat veld wanneer hij een elementaire move naar het betrokken veld uitvoert.
Het derde tussenvoegteken is de komma.
onthoud
De schuine streep, de nul en de komma vult de computer in principe op de aangegeven plaats in. Maar er komt een spatie voor in de plaats als het teken alleen maar onderdrukte nullen voor zich heeft. Net zoals alle andere vormen van opmaak, werkt het tussenvoegen niet als er bij de move een groepsveld is betrokken.
Een voorbeeld van het gebruik van komma's in een veld:
01 grootbedrag picture ZZ,ZZZ,ZZ9.99.
Bekijk in de volgende tabel wat het resultaat is na elke move-opdracht
opdracht veldinhoud move 12345678.90 to grootbedrag 12,345,678.90 move 45678.90 to grootbedrag 45,678.90 move 678.90 to grootbedrag 678.90
We zien dat een komma zichtbaar wordt op de aangegeven plaats, behalve als er alleen maar spaties voor staan. Deze regel is niet zo gek, want een verdwaald kommaatje tussen allemaal spaties staat een beetje raar. De komma is hier gebruikt om de duizendtallen te scheiden. In de volgende paragraaf zullen we zien hoe we de functie van de komma en punt kunnen verwisselen. We kunnen de komma en de punt dan toepassen op de manier die in Nederland gebruikelijk is.
Het laatste tussenvoegteken is de spatie. In de picture-string geven we die aan met de letter B (van het Engelse woord blank).
onthoud
De letter B in een picture-string geeft een spatie in het veld als er een waarde naar het veld wordt overgebracht via een move-opdracht waarbij geen groepsvelden zijn betrokken.
Deze letter B levert een handige manier om getallen te splitsen.
01 telefoonnummer picture ZZZBZZB99.
illustratie: Geert Nijmolen
Als we het getal 123456 overbrengen naar het veld telefoonnummer met de bovenstaande picture, dan is de inhoud van dat veld (figuur 4.2):
Figuur 4.2 Telefoonnummer
Het eerste lege vakje komt vanwege de Z in de picture; het is een onderdrukte nul. De andere twee lege vakjes zijn veroorzaakt door de letter B in de picture-string.
Het verfraaien van de uitvoer heeft bijna uitsluitend betrekking op numerieke velden. Maar er is één uitzondering:
onthoud
De tussenvoegtekens '/', '0' en 'B' mogen ook in een alfanumeriek veld voorkomen. De andere opmaaktekens, zoals de punt en de komma dus niet!
Een voorbeeld van de B temidden van X-en:
01 opgemaakte-postcode picture XXXXBXXBB.
De opdracht:
move "9876AH" to opgemaakte-postcode
Levert netjes een spatie tussen de beide elementen van de postcode en twee spaties na de twee letters in de postcode (figuur 4.3):
Figuur 4.3 Postcode
In een veld moet minstens één positie beschikbaar zijn voor een teken uit het zendende veld. Een veld mag dus niet uitsluitend uit tussenvoegtekens bestaan.