Tot nu toe kennen we twee soorten variabelen: numerieke (9 in de picture) en alfanumerieke (X in de picture).
Hier volgt de veldbeschrijving van een alfanumerieke variabele:
01 alfanumeriek picture X(5).
Deze variabele heet alfanumeriek en hij is alfanumeriek. Hij heet naar wat hij is, net zoals mijn huisdokter, de heer H. Arts.
We kennen tot nu toe twee opdrachten die een waarde geven aan een variabele: accept en compute. Met accept komt de waarde van buitenaf. Dit kan zowel een numerieke als een alfanumerieke waarde zijn. Bij compute komt de waarde vanuit het programma en die waarde moet altijd numeriek zijn. Er ontbreekt dus nog een opdracht om vanuit het programma een waarde toe te kennen aan een alfanumerieke variabele. Met de move-opdracht kan dat. Voorbeeld:
move "begin" to alfanumeriek
Het veld alfanumeriek is na deze opdracht gevuld met de vijf letters van de tekstconstante. Natuurlijk hoeft het aantal tekens niet altijd precies gelijk te zijn aan de lengte van het veld. Hier volgt drie keer een move-opdracht naar het veld alfanumeriek.
move "?" to alfanumeriek move "H3" to alfanumeriek move "te lang" to alfanumeriek
De inhoud van het veld na elk van die move-opdrachten kun je aflezen in de volgende figuur.
Figuur 3.1 Inhoud van het veld alfanumeriek
Uit de voorbeelden blijkt dat de volgende regels gelden bij een move-opdracht
naar een alfanumeriek veld:
- links beginnen in het veld;
- als er te weinig tekens zijn, dan opvullen met spaties;
- als er teveel tekens zijn, dan aan de rechterkant afkappen.
In de laatste situatie geeft de computer tijdens de uitvoering van het programma geen foutmelding. Het is de eigen verantwoordelijkheid van de programmeur om te zorgen dat de velden voldoende lang zijn.
illustratie: Geert Nijmolen
onthoud
De move-opdracht geeft een waarde aan een variabele. Die variabele mag alfanumeriek zijn, maar ook bij numerieke variabelen mag de move-opdracht gebruikt worden.
Om een waarde toe te kennen, gebruikten we tot nu toe bij numerieke variabelen de compute-opdracht, maar de move-opdracht is vaak korter en duidelijker. Dit feit maakt de move-opdracht tot een van de meest gebruikte in COBOL. Voor de voorbeelden gaan we uit van de volgende veldbeschrijvingen:
01 numeriek-geheel picture 9(5). 01 numeriek-gebroken picture 9(3)V99.
Dit zijn twee variabelen. Ze heten numeriek-geheel en numeriek-gebroken. Het eerste veld heeft geen V in de picture. Dat betekent dus dat er in dat veld nooit cijfers 'na de komma' kunnen staan. Eventueel mogen we de V aan het eind plaatsen (of denken). De picture voor het veld numeriek-geheel zou dan worden: picture 9(5)V.
Hier volgt een reeks move-opdrachten. Na elke opdracht staat de inhoud vermeld van het ontvangende veld. Bij het veld numeriek-gebroken is er geen scheiding tussen de eerste drie en de laatste twee cijfers. Dat is in overeenstemming met de V in de picture, die immers virtueel is. Bij het rekenen houdt de computer wel rekening met de decimaalaanduiding. Dat vind je terug in de laatste kolom.
opdracht veldinhoud rekenwaarde move 43 to numeriek-geheel 00043 43 move 987.65 to numeriek-geheel 00987 987 move 123456 to numeriek-geheel 23456 23456 move 43 to numeriek-gebroken 04300 43 move 987.65 to numeriek-gebroken 98765 987.65 move 123456 to numeriek-gebroken 45600 456 move 4.567 to numeriek-gebroken 00456 4.56
Uit deze voorbeelden kunnen we de volgende regels afleiden voor het overbrengen van getallen naar numerieke variabelen:
We hoeven niet altijd een constante naar een veld te brengen. Het is ook mogelijk om de inhoud van een bepaald veld naar een ander veld over te brengen. Voorbeelden:
move 126 to numeriek-gebroken move numeriek-gebroken to numeriek-geheel
De eerste move zorgt voor de cijfers 12600 in het veld numeriek-gebroken (de rekenwaarde is dan 126). Die waarde verhuist met de tweede move naar het veld numeriek-geheel. Daarbij gelden verder dezelfde regels als bij het overbrengen van een constante. De inhoud van het veld numeriek-geheel wordt 00126.