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

Verwijderde inhoud Toegevoegde inhoud
het gebeurT
Sephiroth (overleg | bijdragen)
kGeen bewerkingssamenvatting
Regel 1:
{{Programmeren in COBOL}}
Dit is een hoofdstuk van ''Programmeren in COBOL''. Hier zul je leren hoe je '''sequentiële bestanden''' kunt lezen.
===Voorbeeld van een Sequentieelsequentieel bestand===
==Sequentiële bestanden lezen==
Een sequentieel bestand is een bestand waar iedere lijn een ''record'' vormt. Een record zal gegevens opslaan voor bijvoorbeeld één persoon. Een sequentieel bestand kan verschillende datatypes (of extensies) hebben. Wij zullen ''.dattxt'' gebruiken. Maar dat kan natuurlijk ook ''.dat'' of ''.in'' of iets anders zijn.
===Voorbeeld van een Sequentieel bestand===
Een sequentieel bestand is een bestand waar iedere lijn een ''record'' vormt. Een record zal gegevens opslaan voor bijvoorbeeld één persoon. Een sequentieel bestand kan verschillende datatypes (of extensies) hebben. Wij zullen ''.dat'' gebruiken. Maar dat kan natuurlijk ook ''.in'' of iets anders zijn.
{{code
|Taal = COBOL
Regel 14 ⟶ 13:
}}
In dit sequentieel bestand worden de naam, adres en geslacht van een persoon opgeslagen.
==Sequentiële bestanden lezen==
 
===Het bestand lezen===
We gaan een klein programma schrijven dat de gegevens inleest en alleen de achternaam, voornaam en geslacht op het scherm toont.
{{code
Regel 28 ⟶ 26:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT invoer ASSIGN TO "invoer.dattxt"
LINE SEQUENTIAL.
 
Regel 37 ⟶ 35:
02 achternaam PIC X(20).
02 voornaam PIC X(15).
02 PIC X(39).
02 geslacht PIC X.
 
Regel 58 ⟶ 55:
</pre>
}}
 
<pre>
Jan Peeters M
Peter Jansen M
</pre>
 
Nu gaan we dat een beetje uitleggen.
{{code
Regel 73 ⟶ 68:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT invoer ASSIGN TO "invoer.dattxt"
LINE SEQUENTIAL.
</pre>
}}
Als er gewerkt wordt met bestanden wordt dit stukje toegevoegd. Het bestand ''invoer.dattxt'' wordt gekoppeld met ''invoer'' wat belangrijk is in de ''dataDATA divisionDIVISION''. ''LineLINE sequentialSEQUENTIAL'' geeft aan dat het een sequentieel bestand is.
{{code
|Taal = COBOL
Regel 89 ⟶ 84:
02 achternaam PIC X(20).
02 voornaam PIC X(15).
02 PIC X(39).
02 geslacht PIC X.
</pre>
}}
In de ''DATA DIVISION'' komt er de ''FILE SECTION'' 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 136 ⟶ 130:
 
==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 ''ACCEPT'', maar dat neemt tijd in beslag. We gebruiken in dit voorbeeld hetzelfde sequentieel bestand om te lezen als in het vorige.
{{code
Regel 149 ⟶ 142:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT invoer ASSIGN TO "invoer.dattxt"
LINE SEQUENTIAL.
 
SELECT uitvoer ASSIGN to "uitvoer.dattxt"
LINE SEQUENTIAL.
 
Regel 161 ⟶ 154:
02 achternaam PIC X(20).
02 voornaam PIC X(15).
02 PIC X(39).
02 geslacht PIC X.
 
Regel 198 ⟶ 190:
</pre>
}}
Een uitvoer-bestand wordt op dezelfde manier gekoppeld met een groepsveld en ook op dezelfde manier gesloten. Het bestand openen gebeurt op een andere manier "OPEN outputOUTPUT uitvoer". In COBOL wordt namelijk een '''bestand gelezen''', terwijl een '''record geschreven''' wordt.
{{code
|Taal = COBOL
Regel 210 ⟶ 202:
</pre>
}}
Het enige waar er moet op gelet worden, is het overzetten van de variabelen van het éne groepsveld naar het andere en ook de ''WRITE''-commando gevolgd door de groepsveld van de uitvoer en de ''END-WRITE''. Hieronder bevindt zicht het resultaat van dit programma.
===Het resultaat===
<pre>
Jan Peeters M
Peter Jansen M
</pre>
==Record achteraan toevoegen==
Telkens we ''OPEN OUTPUT'' doen en we schrijven daar iets in wordt er eigenlijk een nieuw bestand opgeslagen m.a.w. als er al een bestand bestond met dezelfde naam gaan de gegevens in dat bestand verloren en wordt het vervangen door andere gegevens. Daardoor kun je geen record toevoegen met ''OPEN OUTPUT'' hievoor moet je ''OPEN EXTEND'' gebruiken. ''OPEN EXTEND'' betekent dat je automatisch vanachter gegevens kunt toevoegen. In dit volgende programma gaat de gebruiker gegevens van een persoon opgeven en die worden achteraan toegevoegd.
{{code
|Taal = COBOL
|Titel = Record achteraan toevoegen.
|Code =
<pre>
IDENTIFICATION DIVISION.
PROGRAM-ID. RecordToevoegen.
 
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT uitvoer ASSIGN to "uitvoer.txt"
LINE SEQUENTIAL.
 
DATA DIVISION.
FILE SECTION.
FD uitvoer.
01 regel.
02 uitvn PIC X(3915).
02 PIC X(39).
02 uitan PIC X(3920).
02 PIC X.
02 uitge PIC X.
 
WORKING-STORAGE SECTION.
77 PIC X VALUE "n".
88 eof VALUE "j".
 
PROCEDURE DIVISION.
HOOFD.
OPEN EXTEND uitvoer
DISPLAY "Geef de voornaam:"
ACCEPT uitvn NO BEEP
DISPLAY "Geef de achternaam:"
ACCEPT uitan NO BEEP
DISPLAY "Geef het geslacht:"
ACCEPT uitge NO BEEP
WRITE regel END-WRITE
CLOSE uitvoer
STOP RUN.
</pre>
}}
Niet zo moeilijk dus gewoon in de plaats van ''OPEN OUTPUT'' moet je ''OPEN EXTEND'' gebruiken.
[[Categorie:Programmeren in COBOL|Sequentiële bestanden]]
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.