Gegeven is een CSV-bestand, met als gedaante:
Naam; Sleutel; A; ...
(zie ook het voorbeeld onderaan de opgave)
De hoofdingen 'Naam' en 'Sleutel' komen resp. als eerste en als 2de hoofding in het bestand voor.
In deze oefening maken we een klasse Werkblad
, waarbij de inhoud van het werkblad
in dit CSV-bestand te vinden is. Bedoeling is om na te kijken of gegevens van dit werkblad aan
zekere regels voldoen, en indien dit niet het geval is, dit in het werkblad aan te geven.
Werkblad
:
een constructor met 1 argument, namelijk de naam van het CSV-bestand waar de gegevens van het werkblad te vinden zijn
de methode __str__()
levert de string-gedaante van de lijst-van-lijsten gedaante van het werkblad (maak
hier uiteraard gebruik van de ingebouwde stringconversie van lijsten !)
de methode voeg_validator_toe()
met 1 argument, een object van de klasse Validator
(of van een overervende klasse van Validator
). Deze methode voegt de validator toe aan het werkblad.
Elke validator werkt in op een kolom van het werkblad.
de methode aantal_validators()
: deze methode levert een lijst gehele getallen als resultaat. Deze lijst
telt evenveel elementen als er kolommen zijn in het werkblad. Het element op positie $$i$$ geeft hierbij aan hoeveel
validatoren toegevoegd werden m.b.t. kolom met rangnummer $$i$$ (kolommen worden genummerd vanaf 0). Vermits we in deze
oefening hoogstens 1 validator per kolom zullen toevoegen, zijn alle elementen van deze lijst 0 of 1. Je mag veronderstellen
dat in de klasse Validator
een methode get_kolom()
(zonder argumenten) beschikbaar is, die aangeeft op
welke kolom de validator ingrijpt.
de methode valideer()
zonder argumenten past alle toegevoegde validatoren toe op het werkblad. Je mag ervan uitgaan
dat elke validator over een methode correct()
beschikt, met 1 argument, namelijk een rij van het werkblad (dus een lijst
van strings). De methode valideer()
loopt dus alle rijen af van de tabel, met uitzondering van de rij die de hoofdingen
van de tabel bevat, en past alle toegevoegde validators toe. De methode levert geen expliciet resultaat op.
de methode schrijf()
met als enig argument een string, schrijft de gegevens van het werkblad terug weg naar een CSV-bestand waarvan
de naam te vinden is in het argument van die methode.
een constructor met 1 argument, namelijk het rangnummer van de kolom die moet gevalideerd worden. Je mag aannemen dat het om een geldig kolomnummer gaat.
de methode get_kolom()
zonder argumenten, levert het rangnummer van de kolom waarop de validator van
toepassing is
de methode correct()
met 1 argument, namelijk een lijst van strings, die een rij van het werkblad voorstelt.
De methode realiseert volgend basisgedrag voor het element van de rij op de kolom waarop de validator van toepassing is:
Validator
:
een constructor met drie argumenten, namelijk:
de methode correct()
met 1 argument, namelijk een lijst van strings, die een rij van het werkblad voorstelt.
De methode realiseert volgend gedrag voor het element van de rij op de kolom waarop de validator van toepassing is:
Validator
:
een constructor met drie argumenten, namelijk:
de methode correct()
met 1 argument, namelijk een lijst van strings, die een rij van het werkblad voorstelt.
De methode realiseert volgend gedrag voor het element van de rij op de kolom waarop de validator van toepassing is:
Inhoud 'Validatie_0.csv' Naam;Sleutel;A;B;C Cornelissen, Inke;;218,0;1476,0;1775,0 Truwant, Sofie;179aAE;1336,0;789,0; Vrielinck, Yannis;B@96;;1400,0;1591,0 Bomans, Miriam;5f11Eb;1327,0;1859,0;994,0 print(blad) #[['Naam', 'Sleutel', 'A', 'B', 'C'], ['Cornelissen, Inke', '', '218,0', '1476,0', '1775,0'], ['Truwant, Sofie', '179aAE', '1336,0', '789,0', ''], ['Vrielinck, Yannis', 'B@96', '', '1400,0', '1591,0'], ['Bomans, Miriam', '5f11Eb', '1327,0', '1859,0', '994,0'], sleutel_validator = SleutelValidator(1, 1, '$') num_val1 = NumeriekeValidator(3, 334, 1341) num_val2 = NumeriekeValidator(2, 470, 1005) blad.voeg_validator_toe(sleutel_validator) blad.voeg_validator_toe(num_val1) blad.voeg_validator_toe(num_val2) blad.aantal_validators() [0, 1, 1, 1, 0] blad.valideer() print(blad) #[['Naam', 'Sleutel', 'A', 'B', 'C'], ['Cornelissen, Inke', 'LEEG', 'VALMAX', '1775,0'], ['Truwant, Sofie', 'SPEC', 'VAL>MAX', '789,0', ''], ['Vrielinck, Yannis', 'SPEC', 'LEEG', 'VAL>MAX', '1591,0'], ['Bomans, Miriam', 'SPEC', 'VAL>MAX', 'VAL>MAX', '994,0'], blad.schrijf('Validatie_0_2_out.csv') Inhoud 'Validatie_0_out.csv' Naam;Sleutel;A;B;C Cornelissen, Inke;LEEG;VAL MAX;1775,0 Truwant, Sofie;SPEC;VAL>MAX;789,0; Vrielinck, Yannis;SPEC;LEEG;VAL>MAX;1591,0 Bomans, Miriam;SPEC;VAL>MAX;VAL>MAX;994,0