Es gibt mehrere nützliche Funktionen um in PowerShell einen String zu bearbeiten. Um diese nutzen zu können, sollte man ein Grundverständnis für eine String haben. Jedes Zeichen in einem String ist mit einer numerischen Wert versehen, angefangen mit 0. Also ist ein String ein eindimensionales Array. So gibt es die Möglichkeit jedes Feld einzeln in unserem Beispielstring $bspStr = „Ich-bin-ein-String-mit-Trennzeichen.“ mittels $bspStr[i] abzurufen. Mit $bspStr[2] würden wir das „h“ aus „ich“ anzeigen lassen. Array Felder werden immer mit [ ] aufgerufen. Strings lassen sich einfach mit dem „+“ Zeichen zu einem neuen String verbinden.
Die wohl wichtigsten drei Funktionen habe ich folgender Tabelle kurz beschrieben.
Funktion | Beschreibung |
Split() | Split trennt einen String bei einem gewünschten Zeichen. Das Ergebnis ein Array. |
Remove() | Remove entfernt eine bestimmten Bereich aus dem String. |
Replace() | Mit Replace kann ein bestimmtes Zeichen, oder eine Zeichengruppe durch eine andere ersetzt werden. |
Length | Length zeigt die Länge des Strings an, beginnend immer mit 0. |
Nehmen wir wieder unserem Beispielstring „Ich-bin-ein-String-mit-Trennzeichen.“ Mit Split(„-„) können wir den String problemlos beim Trennzeichen „-“ trennen. Dies geht natürlich auch mit jedem anderem Zeichen, eingeschlossen Tabs und Leerzeichen. Durch Remove(0,3) entfernen wir das „Ich“ aus dem String. Die erste Ziffer zeigt an ab wo der String entfernt werden soll, die zweite Ziffer gibt die Länge des zu entfernenden Stringteils an. Mit Replace(„i“,“!“) können wir spielend alle i’s zu Ausrufezeichen umwandeln. Wobei das große I in Ich bleibt. Da dies einen anderen ASCII Code hat.
Codebeispiele
Einzelne Zeichen aus String ziehen, Strings verbinden
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr[2] #Ausgabe #h #Beispiel 1 Strings verbinden $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $weitererStr ="So sieht es aus." $bspStr = $bspStr + $weitererStr $bspStr #Ausgabe #Ich-bin-ein-String-mit-Trennzeichen.So sieht es aus. #Beispiel 2 Strings verbinden $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $weitererStr ="So sieht es aus." $bspStr = $bspStr + " " + $weitererStr $bspStr #Ausgabe #Ich-bin-ein-String-mit-Trennzeichen. So sieht es aus. #Beispiel 3 Strings verbinden $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $weitererStr ="So sieht es aus." $bspStr = " $($bspStr) $($weitererStr)" $bspStr #Ausgabe #Ich-bin-ein-String-mit-Trennzeichen. So sieht es aus. |
Split()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#Variante 1 $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr = $bspStr.Split("-") # alternativ $bspStr = $bspStr.Split([char]45) $bspStr #Ausgabe, der String wird nun zu einem 'richtigen Array' #Ich #bin #String #mit #Trennzeichen #Variante 2 $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr = $bspStr.Split("-") $bspStr[3] #Ausgabe, jeder getrennte Textbereich ist nun in einem Feld #String # Es lassen sich auch mehre Felder ausgeben $bspStr[3,5] # Ausgabe #String #Trennzeichen. |
Remove()
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Beispiel 1 $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr.Remove(0,3) $bspStr #Ausgabe #-bin-ein-String-mit-Trennzeichen. #Beispiel 2 $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr.Remove(23,5) $bspStr #Ausgabe #Ich-bin-ein-String-mit-zeichen. |
Replace()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#Variante 1 $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr.Replace("i","!") $bspStr #Ausgabe #Ich-b!n-e!n-Str!ng-m!t-Trennze!chen. #Variante 2 $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr.Replace("i",[char]33) $bspStr #Ausgabe #Ich-b!n-e!n-Str!ng-m!t-Trennze!chen. #Beispiel 2 - diese Zeichen einfach entfernen, durch nichts ersetzten. $bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr.Replace("i",$null) $bspStr #Ausgabe #Ich-bn-en-Strng-mt-Trennzechen. |
Length
1 2 3 4 5 |
$bspStr = "Ich-bin-ein-String-mit-Trennzeichen." $bspStr.Length $bspStr #Ausgabe #36 |
rewe
Für das Grundprinzip ein guter Anfang. Nur sieht die Anwendung komplexer aus.
z.B. liest man eine Textdatei ein die Ordnernamen in der Form Auftragsnumer RITM0012345-Auftrag_Heinz Müller und das seitenlang.
Die Datei ist eingelesen und befindet sich in einem Array.
Nun möchte man nur die Auftragsnummern haben.
$list = Get-content „K:\Ticketpruefung\AngeboteohneBestellung.txt“
$lists = $list.split(„-”,2);
foreach($l in $lists){ $l }
Das funktioniert schon gut, da ist dann die Auftragsnummer in Zeile 1 und in Zeile 2 alles nach dem Trennzeichen –
Nur wie bekommt man nun den Text nach dem Trennzeichen gelöscht damit nur noch die Auftragsnummern die auch mal Req0125666 oder INC89562411 lauten können übrig bleiben. D.h. der Zugriff auf den abgetrennten Teil in einem Array oder auf den ersten Teil zum Export erkenne ich hier noch nicht.
Mach es Dir einfacher: Datei in erste Liste (Quelle) einlesen, dann Liste abarbeiten: Aus jeder Zeile die Auftragsnummer rausholen und in zweiter Liste (Ziel) abspeichern.
$Quelle = Get-content „K:\Ticketpruefung\AngeboteohneBestellung.txt“
$Ziel = @() # Leere Liste anlegen
foreach ($S in $Quelle)
{
$temp = $S.split(„-„) # Zeile aus Eingangsdatei splitten in Auftragsnummer und Rest
$Ziel += $temp[0] # Erster Teil aus Split = Auftragsnummer
}
der beitrag hat mir sehr geholfen, danke 😉