Programmeren in COBOL/Bestandsorganisatie/Sequentiële bestanden: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
k scherm
het gebeurT
Regel 2:
Dit is een hoofdstuk van ''Programmeren in COBOL''. Hier zul je leren hoe je '''sequentiële bestanden''' kunt lezen.
==Sequentiële bestanden lezen==
Om een sequentieel bestand te kunnen lezen heb je twee dingen nodig. Een sequentieel bestand en een programma die dat kan lezen.
===Voorbeeld van een Sequentieel bestand===
Een sequentieel bestand is een bestand waar iederiedere lijn een ''record'' vormt. Een record zal gegevens opslaan voor bijvoorbeeld één persoon. Dit is dus een voorbeeld van een sequentieel bestand. Dit zullen we in de volgende oefeningen gebruiken om ermee te leren werken. Een sequentieel bestand kan verschillende datatypes (of extensies) zijnhebben. Wij zullen ''.dat'' gebruiken. Maar dat kan natuurlijk ook ''.in'' of iets anders zijn.
{{code
|Taal = COBOL
Regel 36 ⟶ 35:
FD invoer.
01 persoon.
02 achternaam picPIC xX(20).
02 voornaam picPIC xX(15).
02 picPIC xX(39).
02 geslacht picPIC xX.
 
WORKING-STORAGE SECTION.
77 picPIC xX valueVALUE "n".
88 eof valueVALUE "j".
 
PROCEDURE DIVISION.
Regel 78 ⟶ 77:
</pre>
}}
Als er gewerkt wordt met bestanden wordt dit stukje toegevoegd. Het bestand ''invoer.dat'' wordt gekoppeld met ''invoer'' wat belangrijk is in de ''data division''. ''Line sequential"'' geeft aan dat het een sequentieel bestand is.
{{code
|Taal = COBOL
Regel 88 ⟶ 87:
FD invoer.
01 persoon.
02 achternaam picPIC xX(20).
02 voornaam picPIC xX(15).
02 picPIC xX(39).
02 geslacht picPIC xX.
</pre>
}}
In de ''dataDATA divisionDIVISION'' komt er de ''fileFILE sectionSECTION'' bij. Er wordt gebruik gemaakt van groepsvelden om de gegevens in op te slaan. In dit geval is dat persoon. De som van de lengtes van de velden moet altijd 80 zijn (= 20 + 15 + 39 + 1).
{{code
|Taal = COBOL
Regel 104 ⟶ 103:
</pre>
}}
In de programmacode moet het bestand eerst worden geopend. ditDit doe je met ''openOPEN inputINPUT'', gevolgd door de naam van het bestand. Daarna doe je een ''readREAD''. deDe boolean ''eof'' is nodig voor een lus. Als je op het einde van een bestand zit, wordt deze op ''true gezetTRUE'' gezet. Daardoor kan een lus weten wanneer je op het einde zit. Een ''readREAD'' leest slechts één en één record in één keer. Al de gegevens worden dan in het groepsveld persoon gezet. WaneerWanneer je daarna nog een ''readREAD'' doet, gaat hij naar het volgende record en gaan de gegevens van het vorige verloren.
{{code
|Taal = COBOL
Regel 113 ⟶ 112:
</pre>
}}
Dit is een verwijzing naar een deelprogramma maar ook een lus. Dit zal het deelprogramma blijven uitvoeren tot het aan het einde is van het bestand. Hiervoor wordt de variabele ''eof'' gebruikt, als die op ''true'' staatgezet wordt, eindigt de lus.
{{code
|Taal = COBOL
Regel 134 ⟶ 133:
</pre>
}}
Nadat je gedaan hebt met het lezen van het bestand, moet je het bestand terug sluiten met ''closeCLOSE''.
 
==Sequentiële bestanden schrijven==
===Het bestand schrijven===
Een bestand schrijven volgt natuurlijk het omgekeerde principe van een bestand lezen. Je verwerkt eerst de gegevens je plaatst die in het groepsveld van de uitvoer en vervolgens schrijf je het bestand. We zullen in dit voorbeeld een bestand openen en daarna lezen wat er in zit om dat te verwerken en uit te schrijven. Je moet natuurlijk niet een bestand lezen; je kan gewoon de gegevens inlezen via een ''acceptACCEPT'', maar dat neemt tijd in beslag. We gebruiken in dit voorbeeld hetzelfde sequentieel bestand om te lezen als in het vorige.
{{code
|Taal = COBOL
Regel 160 ⟶ 159:
FD invoer.
01 persoon.
02 achternaam picPIC xX(20).
02 voornaam pic x PIC X(15).
02 pic x PIC X(39).
02 geslacht pic x PIC X.
 
 
FD uitvoer.
01 regel.
02 uitvn picPIC xX(15).
02 pic x PIC X.
02 uitan picPIC xX(20).
02 pic x PIC X.
02 uitge picPIC xX.
 
WORKING-STORAGE SECTION.
77 picPIC xX valueVALUE "n".
88 eof valueVALUE "j".
 
PROCEDURE DIVISION.
Regel 199 ⟶ 198:
</pre>
}}
Een uitvoer -bestand wordt op dezelfde manier gekoppeld met een groepsveld en ook op dezelfde manier gesloten. Het bestand openen gebeurdgebeurt op een andere manier "openOPEN output uitvoer". In COBOL wordt namelijk een '''bestand gelezen''', terwijl een '''record geschreven''' wordt.
{{code
|Taal = COBOL
Regel 211 ⟶ 210:
</pre>
}}
Het enige waar er moet opgeletop gelet worden, is het overzetten van de variabelen van het éne groepsveld naar het anderandere en ook de ''writeWRITE'' -commando gevolgd door de groepsveld van de uitvoer en de ''endEND-writeWRITE''.
===Het resultaat===
<pre>
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.