Kleine Tipps für Zwischendurch (Teil 8) – Fehlende Zahlen in einer Folge finden

Die Steuererklärung muss man zwar nicht gleich mit der PowerShell erledigen, doch als ich vor kurzem vor der Aufgabe stand in einer Folge von mehreren Dutzend Rechnungsnummern die fehlenden Nummern ausfindig zu machen, war natürlich klar, dass dies mit der PowerShell erledigt werden muss. Angenommen, die möglichen Rechnungsnummern laufen von 1000 bis 1050, und die erfassten Rechnungsnummern sind in einer Datei mit dem Namen Rechnungsnummern.txt Zeile für Zeile enthalten, dann liefert der folgende Befehl alle Zahlen, die nicht in der Datei enthalten sind:

1000..1050 | where-object { [System.Array]::IndexOf(get-content Rechnungsnummern.txt) -eq -1}

Was mir an dieser Lösung nicht so gut gefällt ist der Umstand, dass man wissen muss, dass die Array-Klasse eine Shared-Methode IndexOf besitzt, die den Index eines Elements zurückgibt, das mit dem Array übergeben wird. Das kann ein „normaler“ Anwender normalerweise nicht wissen, zumal der Name IndexOf dies nicht unbedingt erahnen lässt und es zudem bei der PowerShell nahezu unmöglich ist, die Members der Array-Klasse per Get-Member zu erhalten (das ist etwas für einen anderen Blog-Eintrag). Doch dafür ist die Lösung einfach (und eine bessere fiel mir nicht ein). Jetzt würde mich nur noch interessieren, ob sich die PowerShell von der Steuer absetzen lässt.

PS: Über ein [System.Array] | Get-Member -static erhält man die Shared-Members der Array-Klasse, zu der auch IndexOf gehört. Ganz so schwer ist es daher nicht darauf zu kommen, dass es ein IndexOf gibt. Die vielversprechend klingenden Members Exits oder Find usw. sind von der PowerShell aus übrigens nicht so einfach aufrufbar. Das wäre wirklich ein Thema für einen umfangreicheren Blog-Eintrag.

Advertisements

Kommentar verfassen

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