2016-08-10 17 views
0

Ich versuche, ein Zeichen innerhalb einer Zeichenfolge zu ersetzen, die in diesem Fall eine Ziffer ist, mit einer anderen Ziffer, die um 1 erhöht wurde, und dann wieder zur ursprünglichen Zeichenfolge hinzufügt und die ersetzen vorheriges Ziffernzeichen.Ersetze numerische Zeichen durch Indexierung

Im folgenden Schnipsel sollte sams2sams3 werden, nachdem dieser Code

jedoch ausgeführt hat, habe ich den Fehler immer wieder, seine Unable to index into an object of type System.String. Ist es nicht möglich, Zeichen durch Indizierung zu ersetzen? Gibt es eine bessere Methode für so etwas?

$SAMAccountName = "sams2" 
       $lastChar = $SAMAccountName.Length - 1 

        [int]$intNum = [convert]::ToInt32($SAMAccountName[$lastChar]) 
        $convertedChar = [convert]::ToString($intNum + 1) 
        $SAMAccountName[$lastChar] = $convertedChar 

Antwort

0

Ok, dies ist ein zweistufiger Prozess. Zuerst bekommen wir die Nummer vom Ende, dann ersetzen wir diese Nummer in der Zeichenfolge.

'sams2' |%{ 
    $Int = 1+ ($_ -replace "^.*?(\d+)$",'$1') 
    $_ -replace "\d+$",$Int 
} 
+0

entdeckte ich eigentlich nur die '-replace' Betreiber. Vielen Dank! –

1

Dies funktioniert nur, wenn die inkrementelle Zahl eine Ziffer ist.

$SAMAccountName = "sams2" 
$partOne = $SAMAccountName.SubString(0, $SAMAccountName.Length - 1) 
$partTwo = [int]$SAMAccountName.SubString($SAMAccountName.Length - 1, 1) + 1 
$SAMAccountName = "$partOne$partTwo" 
0

Vielleicht reguläre Ausdrücke und Gruppen versuchen, und dann in der Lage sein, für freie Multi-Ziffern zu handhaben ...

$SAMAccountName = "sam2" 
# use regex101.com for help with regular expressions 
if ($SAMAccountName -match "(.*?)(\d+)") 
{ 
    # uncomment for debugging 
    #$Matches 
    $newSAMAccountName = $Matches[1] + (([int]$Matches[2])+1) 
    $newSAMAccountName 
} 
0

Es gibt ein paar Dinge in Ihrem Code zu beachten:

  1. Strings sind unveränderlich. Bei jeder Änderung wird eine neue String-Instanz erstellt.
  2. Verwenden Sie StringBuilder, um einzelne Zeichen zu bearbeiten.
  3. Vergewissern Sie sich, dass Sie kompatible Typen haben. String ist kein Zeichen.

einen Blick auf folgende Ausschnitt Nehmen:

$SAMAccountName = "sams2" 
$sb = [System.Text.StringBuilder]$SAMAccountName 
$lastChar = $SAMAccountName.Length - 1 
[int]$intNum = [convert]::ToInt32($SAMAccountName[$lastChar]) 
$covertedChar = [convert]::ToChar($intNum + 1) 
$sb[$lastChar] = $covertedChar 
[string]$sb 

Sie können auch eine andere metod verwenden, wie man folgendes:

$SAMAccountName = "sams2" 
$SAMAccountName.Substring(0, $SAMAccountName.Length-1)+([int]$SAMAccountName.Substring($SAMAccountName.Length-1, 1)+1) 
Verwandte Themen