5.5 Lezen van een bestand

De records die we in een bestand hebben opgeslagen, kunnen we uiteraard via een programma weer terugkrijgen. Dat proces heet lezen. Bij een sequentieel bestand lezen we de records in de zelfde volgorde als waarin ze zijn geschreven. Een leesopdracht direct na het openen van een bestand geeft het eerste record. Elke leesopdracht daarna geeft het volgende record. Op een gegeven moment zijn alle records gelezen en uiteraard moeten we daar rekening mee houden. Aan het einde van het bestand moeten we stoppen. We kunnen geen volgend record lezen als er geen records meer zijn.

We gaan uit van het bestand dat we eerder in dit hoofdstuk hebben gecreëerd en aangevuld. We willen nu alle records uit het bestand lezen en op het scherm plaatsen. Voor het gemak beschouwen we het record in zijn totaliteit als één veld. In de file section beschrijven we het record als een elementair veld, dus zonder onderverdeling in naam, adres en woonplaats. Als die onderverdeling niet nodig is, dan hoeven we hem ook niet te schrijven.

In de working-storage section beschrijven we een wissel (zie paragraaf 4.6 voor een uitleg over wissels). Bij het begin van het programma staat die wissel in stand nul. Als we het einde van het bestand bereiken, zetten we de wissel in stand 1.

 DATA DIVISION.
 FILE SECTION.
 FD NAW-bestand.
 01 NAW-record            picture X(78).
 WORKING-STORAGE SECTION.
 01 einde-bestand-wissel  picture X, value zero.
    88 einde-bestand                 value "1".
  

Voordat we met het lezen kunnen beginnen, openen we het bestand. De opdracht luidt open input NAW-bestand. Daarmee geven we aan dat we het bestand willen gaan lezen met de read-opdracht. Vanuit het programma gezien vormen de records invoer (input). In een herhalingsstructuur lezen we vervolgens alle records van het bestand. Als er bij een leesopdracht geen records meer zijn, dan geeft de computer een seintje. Daarop kunnen we reageren via de at-end-optie. Als we nog niet aan het eind zijn, dan plaatsen we het gelezen record met een display-opdracht op het scherm.

 Leesroutine.
     Open input NAW-bestand.
     Perform with test after until einde-bestand
        Read NAW-bestand next record
           at end set einde-bestand to true
           not at end display NAW-record
        End-read
     End-perform
     Close NAW-bestand
  

Bij een sequentieel bestand mogen de woorden next en record worden weggelaten zonder dat er verschil in betekenis is.

onthoud

Het is verplicht om een voorziening te treffen die de einde-bestand-situatie opvangt.

Wij doen dat in dit boek altijd via de at-end-optie en die mag dus niet worden weggelaten. Na at end mogen een of meer opdrachten staan. Not at end is niet verplicht. Als die optie ontbreekt, dan gaat de computer verder met de opdracht na de read. In dit geval is not at end wel heel erg handig, want de display-opdracht mag alleen maar uitgevoerd worden als er een record is gelezen. Als het einde van het bestand is bereikt, dan hebben we geen record meer en valt er ook niets af te beelden.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo