5.10 Verschillende soorten records in een bestand

Na read komt de naam van een bestand. Na write (en ook na rewrite) komt de naam van een record. Dat is niet gedaan om het de COBOL-cursist moeilijk te maken. Er zit een bedoeling achter. Na read staat de bestandsnaam. Het record dat aan de beurt is, wordt vanuit het bestand gelezen en geplaatst in het recordgebied van het genoemde bestand. Daar valt verder niets te kiezen. Er is slechts één record aan beurt en dat record leest de computer.

Bij het schrijven van records is dat anders. Als een bestand verschillende soorten records kan bevatten, dan geven we via de record-naam aan welk record we willen schrijven. Hoe kunnen we de computer vertellen dat bij een bestand verschillende records horen? Dat kan in de file section. Daar staat de bestandsbeschrijving (FD), gevolgd door minstens één recordbeschrijving (01-niveau). Minstens één; het mogen er ook meer zijn.

In het volgende voorbeeld zijn voor het bestand boekenbestand twee verschillende recordbeschrijvingen genoteerd:

FD boekenbestand.
01 boekgegevens.
   03 ISBN           pic X(10).
   03 titel          pic X(30).
   03 auteur         pic X(20).
   03 aantal-blz     pic 9(04).
   03 aantal-drukken pic 9(02).
01 drukgegevens.
   03 jaar-maand     pic 9(04).
   03 oplage         pic 9(04).
  

Hier is beschreven dat het boekenbestand uit twee soorten records bestaat: boekgegevens en drukgegevens. Boekgegevens heeft een lengte van 66 tekens. Drukgegevens is 8 tekens lang. Let op: er zijn niet twee recordgebieden, maar hetzelfde recordgebied wordt voor twee soorten records gebruikt. Het recordgebied is 66 tekens lang. Voor boekgegevens is dat hele gebied benut. Voor drukgegevens zijn alleen de eerste acht tekens in gebruik. Als er verschillende recordbeschrijvingen onder een FD staan, dan geldt altijd dat dit verschillende indelingen zijn van een en hetzelfde recordgebied.

Bij de write-opdracht noemen we de naam van een van de records. Als we een record van het type boekgegevens willen wegschrijven dan coderen we:

write boekgegevens.  

Willen we een record van het type drukgegevens schrijven, dan noemen we die naam:

write drukgegevens.  

De computer vindt alles best; hij brengt keurig het juiste aantal bytes over naar het bestand. We moeten in zo'n geval zelf goed onthouden wat we doen, want anders weten we bij het lezen niet goed welk soort record we lezen. In dit voorbeeld is het verband tussen de twee record-soorten het veld aantal-drukken. De inhoud van dat veld bepaalt hoeveel records van het soort drukgegevens er daarna volgen.

Bekijk de procedure division van een programma dat de titel van een boek afdrukt, gevolgd door de drukgegevens die erbij horen.

procedure division.
verwerk-bestand.
    open input boekenbestand; output afdrukbestand
    perform with test after until einde-boekenbestand
       read boekenbestand
       at end
          set einde-boekenbestand to true
       not at end
          move titel to afdrukregel
          write regel after 2 lines
          perform verwerk-drukken aantal-drukken times
       end-read
    end-perform
    close boekenbestand; afdrukbestand
    stop run.

verwerk-drukken.
   read boekenbestand
   at end
      display "Onverwacht einde van boekenbestand"
      stop run
   not at end
      write regel from drukgegevens
   end-read.
  

Het eerste record dat we lezen, zal een record van het type boekgegevens zijn. Als we niet het einde van het bestand bereikten, dan doen we twee dingen: we drukken we de titel af en we voeren een aantal keer de paragraaf verwerk-drukken uit. Hoeveel keer? Dat staat in het veld aantal-drukken. In de paragraaf verwerk-drukken lezen we elke keer een record van het type drukgegevens. Als het goed is, krijgen we bij het lezen van zo'n record nooit de end-of-file melding. Komt die melding toch, dan breken we het programma af. Als alle drukgegevens-records zijn verwerkt, dan keren we terug naar de hoofdroutine. We lezen weer een record van type boekgegevens enzovoort.

Merk op dat dit programma ook correct verloopt als er in het geheel geen records in het bestand aanwezig zijn. Of als er nul records van het type drukgegevens aanwezig zijn van een boek. Dit soort zaken is erg belangrijk. In de praktijk ontstaan juist bij deze 'uitzonderingen' de meeste fouten. We moeten er dus extra goed op letten of een programma ook bij uitzonderingen correct werkt.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo