14.17 Voorbeeld: bestandsconversie

Macsnarf B.V. is een bedrijf met enige tientallen werknemers. In een relatief bestand met de naam telefoon houdt men bij wie welk toestelnummer heeft. De sleutel van het bestand is het toestelnummer van drie cijfers. Het bestand heeft variabele recordlengte, minimaal 3 posities, maximaal 183 posities.

De recordindeling is als volgt:


Om on-line raadpleging van het bestand te vergemakkelijken, converteert men dit bestand naar een indexed bestand met de naam toestellen. Dit bestand heeft voor elke werknemer een record met vaste lengte. De indeling van een record is als volgt:

De posities 1-6 vormen de primaire sleutel; de posities 3-5 vormen een alternatieve sleutel waarvoor duplicaten zijn toegestaan.

illustratie: Geert Nijmolen

sleutelbos


 IDENTIFICATION DIVISION.
 PROGRAM-ID. Conversie.
******************************************
* Relatief bestand 'telefoon' omzetten   *
* naar indexed bestand 'toestellen'      *
* Auteur: Andree Hollander; 1989/02/02   *
******************************************

 ENVIRONMENT DIVISION.
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
     select telefoon   assign to disk
                       organization relative
                       access mode sequential
                       relative key tel-sleutel
                       file status statusveld.
     select toestellen assign to disk
                       organization indexed
                       file status statusveld
                       access random
                       record key tsl-sleutel
                       alternate record key 
                          tsl-toestel with duplicates.
 
 DATA DIVISION.
 FILE SECTION.
 FD telefoon 
       record is varying from 3 to 183 characters.
 01 tel-record.
    03 tel-afd        pic xx.
    03 tel-aantal     pic 9.
    03 tel-naam       occurs 0 to 9 times 
                      depending on tel-aantal
                      pic x(20).
 FD toestellen.
 01 tsl-record.
    03 tsl-sleutel.
       05 tsl-afd     pic xx.
       05 tsl-toestel pic xxx.
       05 tsl-volgnr  pic 9.
    03 tsl-naam       pic x(20).

 WORKING-STORAGE SECTION.
 01 statusveld        pic xx.
 01 einde-bestand     pic x.
 01 tel-sleutel       pic 999.
 01 volgnummer        pic 99.

 PROCEDURE DIVISION.
 DECLARATIVES
 Onverwachte-fout section.
     use after standard error procedure on telefoon, 
                                           toestellen.
 Stop-programma.
     display "Er is een onverwachte fout opgetreden!"
     display "De statuscode is: ", statusveld
     display "Programma beeindigd!"
     stop run.
 END DECLARATIVES.
*
 NIET-DECLARATIVES SECTION.

*** voorbereidende werkzaamheden
 001-initialiseren.
     open input telefoon, output toestellen
     initialize einde-bestand.

*** verwerk telefoonbestand tot einde
 002-lezen.
     perform with test after until einde-bestand = "J"
         read telefoon next record
             at end move "J" to einde-bestand
             not at end perform 003-vullen-en-schrijven
         end-read
     end-perform
     close telefoon, toestellen
     stop run.

*** maak nieuwe records en schrijf weg;
*** deze paragraaf wordt aangeroepen vanuit 002
 003-vullen-en-schrijven.
    perform with test before 
            varying volgnummer
            from 1
            by 1 
            until volgnummer > tel-aantal
        move volgnummer to tsl-volgnr
        move tel-afd to tsl-afd
        move tel-sleutel to tsl-toestel
        move tel-naam(tsl-volgnr) to tsl-naam
        write tsl-record
    end-perform.
omslag 'Tijd voor COBOL'

Serie: leerboeken informatica

Titel: Tijd voor COBOL 2

Auteur: Andree Hollander

naamlogo