Wir haben in unserem Projekt die Aufgabe die Altdaten eines bestehenden Systems zu übernehmen.
Glücklicherweise kann das Altsystem seine Daten in eine CSV-Datei exportieren.
Unglücklicherweise sind die Altdaten manuell gepflegt und somit entstanden im Laufe der Zeit Pflegefehler.

Das neue System soll nun aber über referenzierte Datensätze die Inhalte der CSV-Datei normalisieren.

Deshalb müssen die exportierten Altdaten nachträglich korrigiert werden, wenn Pflegefehler auftreten und erkannt wurden.

Aufgabe

Schreibe ein Programm, was eine gegebene CSV-Datei einliest und die entsprechenden Spaltenwerten nach Vorgabe korrigiert.

Beispiel-CSV

Name;Deployment State;Vendor;p_Hersteller;p_Typ;p_Model
Computer;Production;RegioData;Fujitsu;Desktop;Esprimo P756
Computer;;RegioData;Fujitsu;desktop;Esprimo P756
Laptop;;AMAZON;Fuitsu;Laptop;Fujitsu U576
...

Die CSV-Datei besitzt eine Kopfzeile, in der die möglichen Spaltenüberschriften stehen.

Man kann bereits an obigem Beispiel sehen, dass der Wert in der Spalte p_Typ mal desktop und mal Desktop ist. Wenn man sich nun für eine Schreibweise entscheidet, sollte die anderen Schreibweise korrigiert werden können.

Hierfür ruft man den CSV Normalizer mit einer yml-Konfigurationsdatei auf, die folgendes Format hat:

Normalizer Konfigurationsdatei

p_typ:
     'desktop': 'Desktop'

Vendor:
     'Fuitsu': 'Fujitsu'

Sollte nun eine Spalte mit entsprechendem Namen (in obigem Beispiel: Vendor) nicht existieren, soll das Programm eine entsprechende Warnung ausgeben, aber weiterlaufen:

Spalte Vendor konnte nicht gefunden werden.

Das Ergebnis des Programmaufrufs:

$> csvnormalizer.php -i altdaten.csv -c normalizer.yml

soll eine neue Datei erzeugen: altdaten-korrigiert.csv

Diese Datei sollte sich nun in Größe und Format nicht vom Original unterscheiden, sondern lediglich einige korrigierte Felder besitzen.

Aufgabe (mögliche Erweiterung)

Das Programm gibt am Ende eine Statistik aus, welche Korrektur, wie oft und in welchen Zeilen, stattgefunden hat.

'desktop' -> 'Desktop' (Auftreten: 2)
    lines 2, 138
...
Coding Kata: CSV Normalisierung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.