5.6 Muteren van een record

Een magneetschijf is een precisie-instrument. Het is mogelijk om een record te lezen en het na wijziging op dezelfde plaats terug te schrijven. Het record moet dan wel dezelfde lengte hebben. Als we een veld toevoegen waardoor het record langer is geworden, dan past het niet meer op zijn plaats. Als het record korter is geworden, dan houden we een stukje van het oude record over. Bij het teruglezen zou dat problemen opleveren. Daarom geldt het voorschrift dat we alleen een record dat even lang is gebleven mogen terugschrijven. Voor het terugschrijven van een record kent COBOL een opdracht: rewrite. Bij een sequentieel bestand zorgt een rewrite-opdracht voor het herschrijven van het laatstgelezen record. Er moet dus altijd eerst een geslaagde read-opdracht zijn geweest voordat er iets terug te schrijven valt.

Stel dat het in het NAW-bestand de postcodes niet zijn opgeslagen. Alleen de woonplaats. De secretaris wil de postcodes toevoegen. Het veld woonplaats blijft even lang en ook het record in zijn geheel houdt dezelfde lengte. Hier volgt het programma om dit te realiseren.


 IDENTIFICATION DIVISION.
 Program-id. Muteren-NAW-bestand.
*Dit programma wijzigt het veld woonplaats van
*alle records in het NAW-BESTAND

 ENVIRONMENT DIVISION.
 INPUT-OUTPUT SECTION.
 File-control.
     Select NAW-bestand assign to "B:NAW-BEST".

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

 PROCEDURE DIVISION.
 Rewrite-routine.
     Open i-o 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
               display "Toets nu postcode en woonplaats"
               accept woonplaats
               rewrite NAW-record
        End-read
     End-perform
     Close NAW-bestand
     Stop run.

  

We bekijken van dit programma de opdrachten in de procedure division. In de perform-structuur lezen we weer alle records. We bieden de gebruiker de gelegenheid om woonplaats opnieuw in te tikken, zodat de postcode er nu bijstaat. Daarna schrijven we het (nu gewijzigde) record terug. Dat is de functie van de rewrite-opdracht.

onthoud

Net zoals bij de write-opdracht geldt ook bij rewrite dat de inhoud van het recordgebied na de write niet meer beschikbaar is.

We zien in dit programma tevens de vierde en laatste mogelijkheid om een bestand te openen. Na output, extend en input zien we hier i-o. Dat staat voor input-output.

onthoud

Een bestand moet voor i-o zijn geopend als we records willen herschrijven. Terugschrijven kan bij een sequentieel bestand alleen na eerst gelezen te hebben. De rewrite-opdracht schrijft het laatst-gelezen record terug naar het bestand.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo