Programmeren in COBOL/Relatieve bestanden met hash: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Hasse (overleg | bijdragen)
kGeen bewerkingssamenvatting
 
Regel 1:
{{Programmeren in COBOL|deel=Bestandsorganisatie|sjabloonuit={{{sjabloonuit}}}}}
Relatieve bestanden kunnen via een sleutel makkelijk een record terugvinden. Dit kan via een cijfer (van 1 tot n). Maar een cijfer is niet altijd handig, en vaak weinig informatief. Een naam of een beschrijvend woord zouden makkelijker zijn. COBOL laat het gebruik van namen toe via een omweg: een [[w:hashfunctie|hash-functie]] zet de naam om in een cijfer waarmee je makkelijk het record kunt terugvinden. Het grote nadeel van een relatief bestand met hash is dat je op voorhand moet weten hoeveel records je maximaal zult hebben. Als je eerst 10 records wou hebben en je maakt dat bestand aan, moet je wanneer je plotseling 20 records wilt opslaan een nieuw relatief bestand aanmaken.
 
==Relatief bestand met hash aanmaken==
Regel 21:
</pre>
}}
Dit bestand gaan we omzetten in een relatief bestand. Het bevat de namen van wiki's met hun omschrijvingen. De namen van de wiki's zullen we gebruiken als sleutel. In het relatief bestand zal zowel de naam als de omschrijving van de wiki staan. Hieronder is een voorbeeld van een programma diedat dit voor ons zal doen.
{{code
|Taal= COBOL
Regel 148:
Waarom wordt ook later uitgelegd. Maar we moeten echter eerst een keer die relatief bestand openen als OUTPUT, dit zorgt ervoor dat het bestand wordt aangemaakt als het nog niet bestaat en voorkomt dat er fouten zijn als we het vervolgens openen met I-O. We lezen vervolgens het eerste lijntje in van het sequentiële bestand. Om vervolgens naar het deelprogramma ''omzetten'' te gaan als het op het einde van het sequentiële bestand is zal het deelprogramma stoppen.
 
Als we in ''omzetten'' zijn aangekomen, gaan we meteen naar het deelprogramma ''zoeken'' en van daaruit meteen naar de hash-functie.
{{code
|Taal= COBOL
Regel 181:
</pre>
}}
De hash functie is juist gebeurd. We hebben dus een sleutel en we lezen vervolgens het relatief bestand. Dit is meteen de reden waarom we het geopend hebben als I-O: we moeten het bestand ook lezen omdat we moeten zien of er niet al een record op die plaats is. Als er geen record is op die plaats dan krijgen we een INVALID KEY, hier ''slechtesleutel'' genaamd. INVALID KEY betekent hier ironisch genoeg dat het goed is want op de plaats van onze sleutel is er geen record dus kunnen we daar een record wegschrijven. Maar wat als er wel een record is? Hiervoor kunnenzijn erdrie 3mogelijke oorzaken zijn: ofwel heeft toevallig een ander record dezelfde sleutel gekregen van de hashfunctie of hebben we het record al een keer weggeschreven of we hebben al 9 records weggeschreven. Aan de twee laatste kunnen we niet veel doen als het record al weggeschreven is maakt het niet veel uit en als we al 9 records hebben weggeschreven moeten we het programma aanpassen zodat we toch meer dan 9 records kunnen gebruiken. Als er toevallig een ander record dezelfde sleutel heeft gekregen noemen we dat een botsing of collision. Dit is niet erg en het gebeurt vrijwel altijd. Het simpelste wat we kunnen doen om het op te lossen is gewoon één bijtellen bij de sleutel en het opnieuw te proberen, dit gebeurt in het deelprogramma botsing. Het is bijna gedaan want nu gaan we al terug naar het deelprogramma ''omzetten''.
{{code
|Taal= COBOL
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.