StrSplit() / StringSplit

Teilt anhand bestimmter Trennzeichen eine Zeichenkette in mehrere Teilzeichenketten auf.

StrSplit() [v1.1.13+]

Array := StrSplit(Zeichenkette , Trennzeichen, ZuEntfernendeZeichen)
Array := StrSplit(Zeichenkette , Trennzeichen, ZuEntfernendeZeichen, MaxParts := -1)  ; [v1.1.28+]

Parameter

Zeichenkette

Eine Zeichenkette, die aufgeteilt werden soll.

Trennzeichen

Fehlt dieser Parameter oder ist er leer, wird jedes Zeichen der eingehenden Zeichenkette als einzelne Teilzeichenkette behandelt.

Ansonsten kann Trennzeichen entweder eine einzelne Zeichenkette oder ein Array mit Zeichenketten sein, um zu bestimmen, wo die Abgrenzungen zwischen den Teilzeichenketten erfolgen sollen. Da die Trennzeichen nicht zu den Teilzeichenketten gehören, sind sie nie im Rückgabewert enthalten. Befindet sich außerdem nichts zwischen einem Paar von Trennzeichen innerhalb der eingehenden Zeichenkette, wird das entsprechende Array-Element leer sein.

Zum Beispiel: "`," würde die Zeichenkette jeweils bei einem Komma teilen. Ebenso würde [A_Tab, A_Space] jedes Mal ein neues Array-Element erstellen, wenn ein Leer- oder Tabulatorzeichen in der eingehenden Zeichenkette vorkommt.

ZuEntfernendeZeichen

Eine optionale Liste von Zeichen (Unterscheidung zwischen Groß- und Kleinschreibung), die jeweils am Anfang und Ende eines Array-Elements weggelassen werden sollen. Wenn ZuEntfernendeZeichen beispielsweise " `t" wäre, wird bei jedem abgerufenen Element Leer- oder Tabulatorzeichen am Anfang und Ende (aber nicht in der Mitte) entfernt.

Falls Trennzeichen leer ist, kennzeichnet ZuEntfernendeZeichen, welche Zeichen im Array weggelassen werden sollen.

MaxParts [v1.1.28+]

Die maximale Anzahl von Teilzeichenketten, die zurückgegeben werden sollen. Wenn dieser Parameter ungleich 0 ist, wird die Zeichenkette maximal MaxParts-1 Mal geteilt und der Rest der Zeichenkette als letzte Teilzeichenkette zurückgegeben (ohne führende oder nachfolgende ZuEntfernendeZeichen). Wenn dieser Parameter fehlt oder -1 ist, gibt es kein Limit.

Rückgabewert

Diese Funktion gibt ein Array (Objekt) mit Zeichenketten zurück.

Beispiele

TestZeichenkette := "Das ist ein Test."
wort_array := StrSplit(TestZeichenkette, A_Space, ".")  ; Punkte weglassen.
MsgBox % "Das vierte Wort ist " wort_array[4]

Farben := "rot,grün,blau"
FarbArray := StrSplit(Farben, ",")
Loop % FarbArray.MaxIndex()
{
    diese_Farbe := FarbArray[A_Index]
    MsgBox, Farbnummer %A_Index% ist %diese_Farbe%.
}

StringSplit

Veraltet: Dieser Befehl ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die StrSplit-Funktion.

StringSplit, AusgabeArray, EingabeVar , Trennzeichen, ZuEntfernendeZeichen

Parameter

AusgabeArray

Name des Pseudo-Arrays, in der jede extrahierte Teilzeichenkette von EingabeVar gespeichert werden soll. Wenn zum Beispiel MeinArray angegeben ist, wird der Befehl die Anzahl der erzeugten Teilzeichenketten (0, wenn keine) in MeinArray0 speichern, die erste Teilzeichenkette in MeinArray1, die zweite in MeinArray2 und so weiter.

Um innerhalb einer Funktion einen Pseudo-Array zu erstellen, das nicht lokal sondern global ist, muss MeinArray0 innerhalb der Funktion als globale Variable deklariert werden, bevor dieser Befehl verwendet wird (Das Gegenteil davon gilt für Assume-Global-Funktionen). Aufgrund des Häufigen Anlasses zu Verwirrung muss jedes Element einzeln deklariert werden. Für weitere Details, siehe Funktionen.

EingabeVar

Name der Variable, deren Inhalt geparst werden soll. Umschließen Sie den Namen nicht mit Prozentzeichen, es sei denn, Sie wollen den Inhalt der Variable als Namen verwenden.

Hinweis: EingabeVar darf keine Variable von AusgabeArray sein.

Trennzeichen

Fehlt dieser Parameter oder ist er leer, wird jedes Zeichen in EingabeVar als einzelne Teilzeichenkette behandelt.

Ansonsten kann Trennzeichen ein oder mehrere Zeichen enthalten (Groß-/Kleinschreibung-sensitiv), um zu bestimmen, wo die Abgrenzungen zwischen den Teilzeichenketten in EingabeVar erfolgen sollen. Da die Trennzeichen nicht zu den Teilzeichenketten gehören, werden sie nie in AusgabeArray kopiert. Befindet sich außerdem nichts zwischen einem Paar von Trennzeichen innerhalb von EingabeVar, wird das entsprechende Array-Element leer sein.

Zum Beispiel: `, (ein Escapezeichen-versehenes Komma) würde die Zeichenkette jeweils bei einem Komma teilen. Ebenso würde %A_Tab%%A_Space% jedes Mal ein neues Array-Element erstellen, wenn ein Leer- oder Tabulatorzeichen in EingabeVar vorkommt.

Es ist möglich, auch eine Zeichenkette als Trennung zu verwenden. Dazu ist es erforderlich, mithilfe von StringReplace alle Vorkommen der Zeichenkette mit einem Zeichen zu ersetzen, das im Text niemals als direkt geschriebener Text vorkommen wird. Das folgende Beispiel zeigt, wie die Zeichenkette <br> als Trennung verwendet werden kann:

StringReplace, NeueHTML, HTMLZeichenkette, <br>, ``, All  ; Ersetzt jedes <br> mit einem umgekehrten Häkchen.
StringSplit, MeinArray, NeueHTML, ``  ; Teilt die Zeichenkette jeweils bei einem umgekehrten Häkchen.
ZuEntfernendeZeichen

Eine optionale Liste von Zeichen (Unterscheidung zwischen Groß- und Kleinschreibung), die jeweils am Anfang und Ende eines Array-Elements weggelassen werden sollen. Wenn ZuEntfernendeZeichen beispielsweise %A_Space%%A_Tab% wäre, wird bei jedem abgerufenen Element Leer- oder Tabulatorzeichen am Anfang und Ende (aber nicht in der Mitte) entfernt.

Falls Trennzeichen leer ist, kennzeichnet ZuEntfernendeZeichen, welche Zeichen im Array weggelassen werden sollen.

Im Gegensatz zum letzten Parameter der meisten anderen Befehle müssen Kommas in ZuEntfernendeZeichen mit einem Escapezeichen versehen werden (`,).

Bemerkungen

Falls die Array-Elemente bereits vorhanden sind, wird der Befehl die Werte nur von den ersten N Elementen ändern - N ist dabei die Anzahl der Teilzeichenketten in EingabeVar. Alle bereits vorhandenen Elemente über N bleiben unverändert. Daher sollte man am besten das 0-Element (MeinArray0) verwenden, um festzustellen, wie viele Elemente tatsächlich mit diesem Befehl erstellt worden sind.

Beispiele

TestZeichenkette = Das ist ein Test.
StringSplit, wort_array, TestZeichenkette, %A_Space%, .  ; Punkte weglassen.
MsgBox, Das vierte Wort ist %wort_array4%.

Farben = rot,grün,blau
StringSplit, FarbArray, Farben, `,
Loop, %FarbArray0%
{
    diese_Farbe := FarbArray%A_Index%
    MsgBox, Farbnummer %A_Index% ist %diese_Farbe%.
}

Bemerkungen

Leerraumzeichen wie Leer- und Tabulatorzeichen werden beibehalten, sofern sie selbst keine Trennzeichen sind oder in ZuEntfernendeZeichen vorkommen. Tabulator- und Leerzeichen können durch Aufrufen der Trim-Funktion an beiden Enden jeder Variable entfernt werden. Zum Beispiel: MeinArray1 := Trim(MeinArray1).

Um eine Zeichenkette im CSV-Format (komma-getrennte Werte) zu splitten, nutzt man eine Parsende Schleife, weil sie nativ mit CSV umgehen kann.

Um die Felder vor dem Splitten anders anzuordnen, nutzt man den Sort-Befehl.

Wenn die Teilzeichenketten nicht dauerhaft im Arbeitsspeicher vorhanden sein müssen, sollten Sie in Betracht ziehen, eine Parsende Schleife zu verwenden. Sie könnten dadurch viel Speicherplatz sparen, vor allem, wenn EingabeVar sehr groß ist. Zum Beispiel:

Farben = rot,grün,blau
Loop, parse, Farben, `,
    MsgBox Farbnummer %A_Index% ist %A_LoopField%.

Siehe auch

Parsende Schleife, Arrays, Sort, SplitPath, IfInString, StringGetPos, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, StringReplace