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.