5.3 Creëren van een bestand

In de procedure division schrijven we bestandsopdrachten. Daaronder vallen bij voorbeeld de opdracht om een record van het bestand te lezen of om een record naar het bestand te schrijven. Een programma mag de bestandsbewerkingen niet zelf uitvoeren. Dat gebeurt altijd via een verzoek aan het besturingssysteem (operating system) van de computer. Het besturingsysteem verzorgt dan de echte bestandsactiviteiten.

illustratie: Geert Nijmolen

cartoon

In deze paragraaf gaan we records naar het NAW-bestand schrijven. In COBOL gebeurt dat schrijven met de opdracht write. Maar we mogen niet meteen een wrtite-opdracht geven. De eerste opdracht die we geven met betrekking tot een bestand, moet open zijn. We moeten een bestand openen voordat we ermee kunnen werken. Bij het openen vertellen we of we naar het bestand willen schrijven of dat we het bestand willen lezen. Als we klaar zijn met de bestandsbewerkingen dan sluiten we het bestand (close). Zoek de drie genoemde opdrachten (open, write en close) op in de procedure division die hier volgt.

 PROCEDURE DIVISION.
 Schrijfroutine.
     Open output NAW-bestand.
     Display "Nieuw NAW-bestand maken"
     Display "======================="
     Perform with test after until naam = "STOP"
        Display space
        Display "Geef de naam (STOP om te stoppen)"
        Accept naam
        If naam not = "STOP" and naam not = "stop" then
           Display "Wat is het adres?"
           Accept adres
           Display "Geef de woonplaats"
           Accept woonplaats
*          alle velden van het record zijn nu gevuld
           Write NAW-record
        End-if
     End-perform
     Close NAW-bestand
  

Bij het openen van het bestand wijst het operating system van de computer een gebied in het geheugen aan waar de records worden opgebouwd. Bij de schrijfopdracht weet het operating system dan waar het record te vinden is. Door deze gang van zaken kun je nooit een veld uit een recordbeschrijving gebruiken voordat er een open-opdracht is geweest. Voor een bestand dat nog niet is geopend, is geen geheugenruimte beschikbaar. Dat verklaart waarom de value-clausule niet is toegestaan voor velden in de file section. Bij het begin van het programma is er immers nog geen geheugenruimte voor die velden. Na het sluiten van het bestand is evenmin geheugenruimte beschikbaar. Een veld uit de recordbeschrijving mag je na het sluiten van het betrokken bestand niet meer gebruiken.

In het programma staat open output NAW-bestand. Dat betekent dat het bestand met de naam NAW-bestand een nieuw bestand is. Vanuit het programma bekeken vormen de records uitvoer (output). Voor een bestand dat is geopend met open output kunnen we daarna alleen write-opdrachten geven (en natuurlijk de close-opdracht). In het voorbeeld zit de write-opdracht in een herhalingsstructuur. Elke keer als een record volledig is gevuld, wordt het weggeschreven. Na het woord write moet de naam staan van een record uit de file section. In dit voorbeeld hebben we slechts één bestand en één recordnaam, dus er is geen keus. Na write moet hier NAW-record staan.

onthoud

Na een write-opdracht zijn de gegevens in het recordgebied niet meer beschikbaar.

De uitvoering van de schrijfopdracht is een zaak van het besturingssysteem. Daardoor mag je er niet van uitgaan dat het recordgebied waar het volgende record wordt opgebouwd hetzelfde gebied is als waar het vorige record stond.

De 'naam' STOP betekent het einde van de invoer. Er hoeft dan geen record meer worden weggeschreven en de herhaling kan stoppen. We sluiten het bestand en het programma is klaar. Als resultaat van het programma staat er op de diskette een bestand met de ingetoetste gegevens erin.

Het sluiten van bestanden is strikt genomen niet nodig als meteen na de close-opdracht stop run staat. Bij een stop run sluit de computer automatisch alle nog geopende bestanden. Voor de meeste programmeurs staat het echter 'niet netjes' om de programma's impliciet te sluiten. Zij vinden het mooier en duidelijker om de bestanden zelf te sluiten.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo