6.3 Samengestelde structuren

Een tabel hoeft niet het enige onderdeel te zijn van een overkoepelend groepsveld. Ook andere velden kunnen er deel van uitmaken.

illustratie: Geert Nijmolen

cartoon

Kijk eens naar het volgende voorbeeld:

01 artikelgegevens.
   03 jaar          pic 9(4).
   03 artikelnr     pic x(7).
   03 kwartaalomzet pic 9(5), occurs 4 times.
   03 btw           pic x.
  

De tabel kwartaalomzet staat hier tussen drie andere velden. Bij die andere velden is uiteraard geen subscript nodig, want ze hebben niets met een tabel te maken. Alleen bij het veld kwartaalomzet moeten we een subscript vermelden. Het gebruik van een subscript is vereist wanneer een veld voorzien is van de occurs-clausule.

Als we de lengte willen weten van het veld artikelgegevens, dan moeten we alle picture-lengtes bij elkaar optellen en daarbij rekening houden met de occurs-clausule. Het groepsveld artikelgegevens bestaat uit 4 + 7 + (4 * 5) +1 = 32 tekens.

Doorbordurend op het vorige voorbeeld kunnen we een constructie maken met twee tabellen.

01 maandgegevens.
   03 maandnaam occurs 12 times, pic xxx.
   03 dagaantal occurs 12 times, pic 99.
  

Het groepsveld maandgegevens omvat twee tabellen, elk van twaalf elementen. Eerst komen twaalf velden maandnaam en daarna twaalf velden dagaantal. In schema is dit weergegeven in figuur 6.1.

Figuur 6.1 Twee tabellen na elkaar

figuur 6.1

Vergelijk figuur 6.1 met het volgende voorbeeld.

01 maandgegevens.
   02 maandelement occurs 12 times.
      03 maandnaam   pic xxx.
      03 dagaantal   pic 99.
  

Het veld maandgegevens is hier even lang als in het vorige voorbeeld, maar de structuur is anders (zie figuur 6.2).

Figuur 6.2 Tabel van groepsvelden

figuur 6.2

Hier is er slechts een tabel van twaalf elementen. Elk element is een groepsveld van vijf posities. Elk veld maandelement bestaat uit twee velden. Bij de velden maandnaam en dagaantal staat geen occurs-clausule. Maar toch zijn er twaalf velden maandnaam en ook twaalf velden dagaantal. We moeten dus een subscript schrijven achter maandelement, maandnaam en dagaantal. In het volgende stukje programma komen die subscripts voor.

    move "feb28" to maandelement(2).
    add 1 to dagaantal(2)
    display maandnaam(2) space dagaantal(2)
  

De display-opdracht levert op:  feb 29

Het is even oppassen als we bij een tabel een voorwaardenaam benoemen.

01 artikelgegevens.
   03 jaar          pic 9(4).
   03 artikelnr     pic x(7).
   03 kwartaalomzet pic 9(5), occurs 4 times.
      88 te-laag values 0 thru 999.
   03 btw           pic x.
  

Omdat de voorwaardenaam te-laag hoort bij kwartaalomzet, moeten we ook bij de voorwaardenaam een subscript vermelden.

    if te-laag(2) then
    ...
  
omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo