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.