petergyger
Goto Top

Powershell: Substring

Hallo

Eine Frage an die Praktiker.
Ich wil aus einem String einen Teil "rauschneiden".

	$zeile.length

gibt aus, dass diese Zeile 45 Byte lang ist.

Jeder dieser folgenden Versuche führt zum Fehler:

Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "Der Index und die Länge müssen sich auf eine Position in
der Zeichenfolge beziehen.


Eingabe1:
	$Zeile =($Zeile).substring('14','34')  

Eingabe2:
	$Zeile =($Zeile).substring(14,34)

Eingabe3:
	$Zeile =($Zeile).substring('14','34')  

Microsoft erleuchtet mich leider nicht

Eine Bitte an die Dozenten und Akademiker die mitlesen: Geht bitte weiter zur nächsten Frage. "Powershell Core", andere Cmdlets, etc. sind hier und jetzt nicht das Thema.
Meine Bitte resultiert aus der Erfahrung mit einer praktischen Frage zu Batchprogrammierung, wo die Antwort in Richtung binärer Aufbau einer DLL, Unicode, etc. ging und für mich kein Jota zu einer Lösung beigetragen hat. Danke für das Berücksichtigen.

Grüsse
Peter

Content-Key: 495918

Url: https://administrator.de/contentid/495918

Printed on: April 26, 2024 at 06:04 o'clock

Member: SeaStorm
Solution SeaStorm Sep 18, 2019 updated at 12:51:42 (UTC)
Goto Top
Hi

$Zeile = "1234567890"  
$Zeile = $Zeile.Substring(3,5)
echo $zeile

->

45678


Eingabe1:
	$Zeile =($Zeile).substring('14','34')  
14 +34 = 48, du schiesst also in der Länge über deinen String hinaus
Technisch wäre der Code aber "korrekt", nur nicht schön ...

Eingabe2:
	$Zeile =($Zeile).substring(14,34)

Eingabe3:
	$Zeile =($Zeile).substring('14','34')  

hier das gleiche Problem.

Was du da sagst ist: Starte bei Zeichen Nummer 14 und gib ab dann die nächsten 34 Zeichen aus, wobei du halt über die 45 Zeichen hinausschiesst.
Entweder du gibst hier (14,10) an um von Zeichen 14-24 zu gehen, oder, falls du immer ab 14 bis ans Ende willst, (14)
Member: Kraemer
Kraemer Sep 18, 2019 updated at 13:00:27 (UTC)
Goto Top

du musst die Wörter schon richtig übersetzen...
Zitat von Microsoft:
Parameters
startIndex
Int32
The zero-based starting character position of a substring in this instance.

length
Int32
The number of characters in the substring.

@SeaStorm hat das Beispiel dazu schon geliefert
Member: PeterGyger
PeterGyger Sep 18, 2019 at 13:54:28 (UTC)
Goto Top
Hallo SeaStorm

Ich habe die Regel RTFM nicht beachtet.
Ich habe Substring als MID$ aus Basic verstanden.
D.h. Angang / Endpunkt des Strings angegeben. Dabei ist der 2. Parameter die Länge die Anzahl Bytes.

Da werde ich halt eine Funktion schreiben.
Da es eine XML Datei ist, werde ich morgen mal genauer nachlesen was Powershell da zu bieten hat.

Danke das Du mir auf das Pferd geholfen hast face-wink

Grüsse
Peter
Member: PeterGyger
PeterGyger Sep 18, 2019 at 13:56:18 (UTC)
Goto Top
Du hast 100% Recht face-smile
Siehe Antwort bei SeaStorm.
Member: Kraemer
Kraemer Sep 18, 2019 at 14:05:55 (UTC)
Goto Top
Zitat von @PeterGyger:
Ich habe Substring als MID$ aus Basic verstanden.
bei mid gibt man auch die Anzahl der Zeichen an face-big-smile https://docs.microsoft.com/de-de/dotnet/api/microsoft.visualbasic.string ...
Member: erikro
erikro Sep 18, 2019 at 14:35:14 (UTC)
Goto Top
Moin,

Zitat von @PeterGyger:
Da es eine XML Datei ist, werde ich morgen mal genauer nachlesen was Powershell da zu bieten hat.

Da habe ich eine nette Einstiegslektüre: https://www.langlitz-it.de/?p=1297

Viel Spaß damit.

Erik
Mitglied: 140913
140913 Sep 18, 2019 updated at 14:44:16 (UTC)
Goto Top
Zitat von @PeterGyger:
Ich habe Substring als MID$ aus Basic verstanden.
D.h. Angang / Endpunkt des Strings angegeben. Dabei ist der 2. Parameter die Länge die Anzahl Bytes.

Da werde ich halt eine Funktion schreiben.
Brauchst du nicht, mit Indexen kannst du alternativ auch arbeiten, bsp
$Zeile[3..7] -join ''  
Da es eine XML Datei ist, werde ich morgen mal genauer nachlesen was Powershell da zu bieten hat.
Da ist das Auslesen über String-Funktionen ja total fehl am Platz face-smile. Dafür gibt's das XML-Object [xml] s. @erikro.
Member: PeterGyger
PeterGyger Sep 18, 2019 at 14:58:58 (UTC)
Goto Top
Hallo Erik

Vielen Dank!

Wie bereits bei Kraemer geschrieben:
Der XML Artikel ist interessant. Über Typecasting PS mitteilen, dass es XML ist, danach über SelectNode das Tag packen und nichts wie ab in die Kiste... 8-) Schon wieder etwas für mein Wochenende
Member: PeterGyger
PeterGyger Sep 18, 2019 updated at 15:13:31 (UTC)
Goto Top
Hallo psuser

"-Join" habe ich effektiv verdrängt. Danke für den Weckruf face-wink
docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/join-string?view=powershell-6

XML ist ein Subset einer Textdatei String. Ergo geht alles auch mit XML. Subtil oder "schön" ist es natürlich nicht. Der psychologische Klassiker: "Gib einem Menschen einen Hammer und er definiert jedes Problem als Nagel..." 8-)

Grüsse
Peter