Meine kleinen Mini-Scripting-Games 2009 – Teil 1 (oder wie sich die PowerShell nebenbei um die Steuererklärung kümmern kann)

Keine Sorge, ich starte nicht meine eigenen Scripting Summer Games, die ja in Kürze offiziell beginnen – mehr dazu hier. Mir ist nur vor kurzem wieder einmal aufgefallen, wie sich die PowerShell auch in Alltagssituationen einsetzen lässt, und wie sich daraus eine nette Aufgabe ableiten lässt, die zu den Scripting Games passen würde.

Gegeben sei eine kleine Txt, die aus einem Copy&Paste-Export aus einer Excel-Tabelle entstanden ist:

Abb. Der Inhalt der Textdatei (mit den aus Excel kopierten Zahlen

Die Aufgabe: Die Beträge sollen aufaddiert werden. Eigentlich eine Kleinigkeit, wenn es nicht zwei Besonderheiten gäbe:

1) Das Euro-Zeichen wird „falsch“ dargestellt (durch ein Fragezeichen), so dass eine einfache Konvertierung Text->Zahl nicht möglich ist.

2) Als Dezimaltrennzeichen wird das Komma verwendet, es sollte aber der Punkt sein.

Wie könnte die Umsetzung der Aufgabe aussehen?

1) Einlesen der Zahlen über Get-Content – Ergebnis: Jede Zeile wird als String-Objekt in die Pipeline gelegt

2) Abtrennen der Zahl aus der Zeile, um das „?“ wegzubekommen – Vorschlag: Über eine String-Funktion (z.B. Substring kombiniert mit IndexOf) oder, ein wenig eleganter, über einen regulären Ausdruck

3) Austausch des Komma gegen den Punkt – Vorschlag: Über den Replace-Operator

4) Konvertieren der Zeichenfolge (die jetzt im richtigen Format vorliegt) in eine aufaddierbare Zahl – Vorschlag: Über eine Typenkonvertierung durch ein vorangestelltes [Single]

Damit ergibt sich eine (zugegeben, nicht gerade kleine) Befehlszeile, die die Aufgabe (anscheinend;) mit Bravour löst:

$Summe =0 ; get-content Excelzahlen.txt | foreach { $R = [regex]::Match(($_ -replace „,“,“.“), „^[0-9]+\.[0-9]{2}“);if ($R.Success) { $Summe += [Single]$R.Groups[0].Value } };$Summe

Auch wenn nur eine schlichte Zahl dabei herauskommt, haben „wir“ bei dieser Aufgabe doch einiges gelernt.

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s