Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
2 Minuten Lesezeit (424 Worte)

Eine Zahlenreihe in zwei alternierende (wechselnde) Gruppen aufteilen mit Powershell

Stellen Sie sich vor, Sie haben eine aufsteigende Reihe natürlicher (ganzer) Zahlen. Sie wollen die Zahlenreihe in 2 Blöcke aufteilen, die nach einer bestimmten Menge von Zahlen jeweils wechselt. Dazu ein Beispiel:

Gruppe 1 Gruppe 2
1-500 501-1000
1001-1500  1501-2000
2001-2500 2501-3000

 

 

 

 

Das kann z.B. interessant sein, wenn Sie eine If-Abfrage definieren möchten, die nur zwei Ausgänge hat, die aber für aufeinanderfolgende Zahlenblöcke abwechselnd auftreten.

Um diese Ergebnis zu erreichen, schauen Sie sich zuerst die Abstände zwischen den Gruppen an. Jeder Gruppe besteht aus jeweils 500 natürlichen Zahlen. Daher teilen Sie eine gegebene Zahl zuerst durch 500. Möchten Sie z.B. die Zahl 1789 in eine Gruppe einsortieren, rechnen Sie 1798/500. Das Ergebnis ist 3,578. Ignorieren Sie den Nachkommateil, denn der interessiert uns nicht. Durch das Teilen mit 500 haben immer 500 aufeinanderfolgende Zahlen die gleiche Vorkommastelle. Jetzt haben wir aber immer noch eine unendliche große Gruppe von Zahlen von jeweils 500. Um die Gruppen in lediglich zwei Gruppen aufzuteilen, teilen wir das Endergebnis durch 2 und schauen und jetzt nur den Rest an, der bei der Division übrig bleibt.

3 / 2 = 1,5 > Rest 5.

Wenn wir durch 2 teilen, kann es tatsächlich immer nur zum Rest 5 oder zu gar keinem Rest kommen, je nachdem, ob die Stelle vor dem Komma gerade oder ungerade ist. Damit haben wir genau zwei Gruppen geschaffen, nämlich die Zahlen, bei denen beim Teilen der ganzzahligen Anteils nach der Divison durch 500 ein gerades Ergebnis herauskommt, und die Zahlen, bei denen ein ungerades Ergebnis herauskommt.

Um den ganzzahlen Anteil einer Zahl programmatisch zu berechnen, stellt und das .Net-Framework in der Klasse [math] die Methode Floor() zur Verfügung. Den Rest einer Division wird auch als Modulo oder Mod bezeichnet. Der mathematische Operator in Powershell ist das %-Zeichen. Hier die beiden Berechnungen:

$Ganzzahl: [math]::floor(1798) # Gibt den ganzzahlen Anteil der Zahl zurück, ohne zu runden
$Ganzzahl % 2 # Gibt den  Rest einer Division zurück, bei geraden Zahlen also Null, bei ungeraden Zahlen 5

Wenn man diese Berechnungen für eine große Zahl von Zahlen durchführen muß, baut man sich am Besten eine Funktion. Wenn Sie nicht bei 0 anfangen wollen zu zählen, sondern bei 1, subtrahiern Sie eins von allen zu testenden Zahlen:

function test-number
{
param
(
  [int]$number
)
  ([math]::floor((($number-1) / 500))) % 2
}

Die Funktion gibt für Zahlen im unteren 500er-Block 0 zurück, für Zahlen im oberen 500er-Block 1.

Um die nächstgrößere Ganzzahl auszugeben, verwenden Sie übrigens den Funktion [math]::Ceiling(<Double>).

 

Für Powershell Cmdlet-Parameter Standardwerte defi...
Ein niedrig priveligiertes Konto zum Entsperren vo...

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Montag, 20. Mai 2024

Sicherheitscode (Captcha)