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.

De klasse Werkblad

Programmeer in de klasse Werkblad:

De klasse Validator

Dit is de basisklasse voor elke validator. Programmeer in deze klasse:

De klasse SleutelValidator

Programmeer in deze klasse, die overerft van Validator:

De klasse NumeriekeValidator

Deze validator wordt enkel toegepast op kolommen die eigenlijk floats bevatten (op de hoofding na). Deze floats zijn in het werkblad opgeslagen als string, met als decimaal teken de komma. Programmeer in deze klasse, die overerft van Validator:

Voorbeeld

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;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