Daten|teiler
Kopieren als Kulturtechnik

PowerShell: Finde n-te Position in einem String

24. Juli 2013 von Christian Imhorst

Telefonnummern werden häufig in den verschiedensten Formen erfasst. Es gibt sie einmal mit einem Schrägstrich nach der Vorwahl, oder mit einem Bindestrich. Außerdem wird der Bindestrich gerne genommen, um die Durchwahl von der restlichen Nummer zu trennen. Das Ergebnis sind dann häufig Telefonnummern, die in etwa so aussehen: „01234/5555-678“, oder „01234-5555-678“, oder „01234-5555678“. Um Ordnung zu schaffen, habe ich zuerst bei allen Rufnummern den zweiten Bindestrich entfernt und dann den Schrägstrich duch einen Bindestrich ersetzt. Vielleicht geht das auch noch einfacher, aber geholfen hat mir dabei die Funktion Get-NthIndexOf, die mit Hilfe einer RegEx anzeigt, an welcher Stelle ein Zeichen in einem String auftaucht, also erster, zweiter oder n-ter Stelle:

function Get-NthIndexOf($s,$c,$i){
    $r = ([regex]$c).Matches($s) | foreach {$_.Groups[0].Index}
    $i = $i-1
    return $r[$i]
}
 
 
$s = "0123-456-789"
$c = "-"
$i = 2
 
$index = Get-NthIndexOf $s $c $i
$s.Remove($index,1)

Geschrieben in Powershell, Windows