C Deel 7 (Wegschrijven naar bestanden)
1. Beginwoord
2. Wegschrijven intro
3. Uitleg van de toepassing
4. Een uitgewerkt voorbeeld
top
1. Beginwoord
Deze tutorial handelt over de wegschrijven naar bestanden in C.
Je moet zeker alle vorige C tutorials goed gelezen, en ook toegepast hebben om deze te kunnen snappen.
Zeker die van functies.
Ik ga ook arrays gebruiken, om alles te vergemakelijken, en natuurlijk loopjes.
top
2. Wegschrijven intro
Wat is de bedoeling van wegschrijven naar bestanden.
Een voorbeeld:
Ik wil een klantensysteem maken voor een winkel, de winkelier moet makelijk nieuwe klanten kunnen toevoegen en ook een lijst kunnen bekijken met al zijn klanten.
Dan heb je niets aan een simpele variabele, want bij het afsluiten van programma vervalt deze.
Je moet dus iets gaan wegschrijven naar een extern bestand.
Dit extern bestand kan je dan aanroepen wanneer je wilt, en hierin staan gegevens.
Ik ga in deze tutorial het "binair wegschrijven" bespreken.
De reden hiervoor is omdat we dan later nog iets met gegevens kunnen doen.
Anders is het gewoon data ergens insteken en laten zitten.
top
3. Uitleg van de toepassing
Hoe gaat dit nu allemaal in zijn werk?
Eerst gaan we een soort van functie maken, een STRUCT genaamd.
In deze STRUCT steken we alle variabelen die we graag willen onthouden.
In het geval van het klantensysteem bestaat de STRUCT dan uit klanten_id, klanten_naam, klanten_adres,...
Een STRUCT is eigelijk een mengeling van een functie en een array.
Bij het declareren ga je zeggen hoeveel MAXIMUM klanten je kan hebben (wat je bij een array dus ook doet).
Het ENORM grootte voordeel hiervan is dat je MEERDERE GEGEVENS kan gaan ingeven en niet zomaar 1 klein gegeven.
Na het maken van de STRUCT gaan we ons bestand waar we de gegevens in opslaan openen.
Dit gebeurt met de misschien wel bekende fopen("bestand.dat", ""); functie.
Tussen die tweede quotes moeten we dan gaan zeggen of we willen wegschrijven of lezen.
Na dit gedaan te hebben gaan we de gegevens vragen aan de uitvoerder van het programma.
En elke keer alle gegevens in zijn gegeven dan schrijven we alles weg met de fwrite(); functie die zeker NIET te onderschatten valt.
Als alle gegevens ingegeven zijn gaan we verder en gaan we de gegevens terug aanroepen.
We penen weer het bestand met fopen("bestand.dat", ""); en dan lezen we alles met fread();
Laten we eens een simpel voorbeeldje bekijken.
top
4. Een uitgewerkt voorbeeld
Ik ga direct een voorbeeld geven, en de uitleg staat ernaast.
#include <stdlib.h>
#include <stdio.h>
//stdio is voor input output
//stdlib is voor het wegschrijven naar bestanden (library)
FILE *fp;
//we hebben een FILEPOINTER nodig, dit is een nieuwe variabele waar we het bestand mee kunnen openen
int i, j;
//een teller en een variabele
int var_leeftijd;
struct persoon{
//de struct aanmaken
char naam[30];
int leeftijd;
//2 variabelen die we willen weten over de persoon
}pers[100];
//met dit statement duiden we aan dat de struct 'array' 100 gegevens maximum kan bevatten
int invoer(){
//de functie invoer aanmaken
fp = fopen("gegevens.dat", "wb");
//de fp een waarde geven, met dit statement gebeurt op dit moment niets maar het is voor later gebruik
//WB betekent Write Binairy -> binair bestand
printf("Gegevens van personen!
");
printf("---------------------------
");
//een simpel lijntje voor de lay out :)
i = 0;
//i leegmaken
printf("Geef nul in bij de leeftijd om te stoppen
");
do{
//zorgen dat de persoon kan stoppen waneer hij wil
printf("Geef de naam: ");
scanf("%s", &pers[i].naam);
//zoals je kan zien is de struct een kleine vorm van een class, maar niet helemaal
//je zet altijd eerst die pers, of wat je ook op het einde van de struct invult, voor de variabele
//dan een punt en dan de variabele zelf
printf("Geef de leeftijd: ");
scanf("%d", &pers[i].leeftijd);
//i is nu nul, maar als het zich blijft herhalen wordt i 1, en dan 2, etc...
//dus je ziet het principe van de array hier tevoorschijn komen
var_leeftijd = pers[i].leeftijd;
if(var_leeftijd != 0){
fwrite(&pers[i], sizeof(struct persoon), 1, fp);
//hiermee schrijf je alles weg, eerst duidt je aan in het hoeveelste je gaat wegschrijven
//welke "tabel", daarna ga je zeggen dat de struct mee geschreven wordt
//die 1 moet er altijd staan maar is niet zo belangrijk
//fp, hier roep je de variabele fp op die je voorheen hebt aangemaakt
i++;
//teller i met 1tje verhogen
}
//alleen als de leeftijd verschillend is van 0 moeten we wegschrijven anders is het nogal nutteloos
printf("
");
printf("---------");
printf("
");
}while(var_leeftijd != 0);
//stoppen als 0 wordt ingegeven
fclose(fp);
//fp leegmaken
}
int weergeven(){
fp = fopen("gegevens.dat", "rb");
//rb = read binairy... we gaan lezen :)
//ik ga hier i als mijn referentie gebruiken, om te zien hoeveel gegevens er zijn, je kan dit ook wegschrijven en later terug oproepen
for(j=0; j<i; j++){
//we gaan alle gegevens er uit halen, van voor te beginnen, bij het 0de gegeven
fread(&pers[j], sizeof(struct persoon), 1, fp);
//als je fwrite perfect hebt begrepen is hier geen verdere uitleg nodig
printf("%s %d %s", "persoon ", j+1, "
");
printf("naam: ");
printf("%s", pers[j].naam);
printf("
");
//de gegevens er terug uithalen, via het zelfde statement als wegschrijven, de array volledig weergeven
printf("leeftijd: ");
printf("%d", pers[j].leeftijd);
printf("
");
//enteren
}
fclose(fp);
//en afsluiten
}
void main(void){
invoer();
weergeven();
//en uitvoeren
}
|
Het lijkt misschien heel groot, maar dat komt omdat meer dan de helft gevuld is met uitleg.
Bestudeer dit + de uitleg goed, ga het een beetje edditen naar eigen keus, en probeer het dan misschien helemaal eens uit je hoofd.
Zelf proberen leer je het meeste van, ik hoop dat je iets aan de tutorial had!
C Tutorial: Wegschrijven naar bestanden in C
|