StringGetPos

Ermittelt die Position einer bestimmten Teilzeichenkette innerhalb einer Zeichenkette.

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

StringGetPos, AusgabeVar, EingabeVar, Suchtext , Vorkommen, Offset

Parameter

AusgabeVar

Name der Variable, in der die ermittelte Position relativ zum ersten Zeichen von EingabeVar gespeichert werden soll. Das erste Zeichen ist bei StringGetPos die Position 0 und bei InStr() die Position 1.

EingabeVar

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

Suchtext

Der zu suchende Text. Die Suche nach einem Treffer unterscheidet nicht zwischen Groß- und Kleinschreibung, sofern StringCaseSense deaktiviert ist.

Vorkommen

Das hat Einfluss darauf, welches Vorkommen gefunden wird, falls Suchtext mehrmals in EingabeVar vorkommt. Fehlt dieser Parameter, gilt standardmäßig L1 (das heißt, dass EingabeVar von links nach rechts durchsucht wird, um die erste Übereinstimmung zu finden). Um dieses Verhalten zu ändern, gibt man eine der folgenden Optionen an:

Ln: EingabeVar wird von links nach rechts durchsucht, um die n-te Übereinstimmung zu finden.

Rn: EingabeVar wird von rechts nach links durchsucht, um die n-te Übereinstimmung zu finden. Wenn n fehlt (oder wenn Vorkommen 1 ist), gilt standardmäßig R1.

Um beispielsweise das vierte Vorkommen von rechts zu finden, gibt man R4 an. Hinweis: Wenn n kleiner gleich 0 ist, wird keine Übereinstimmung gefunden.

Offset

Die Anzahl der Zeichen auf der linken oder rechten Seite (abhängig vom obigen Parameter), die übersprungen werden sollen. Fehlt dieser Parameter, gilt standardmäßig 0. Das folgende Beispiel beginnt die Suche beim 10. Zeichen von links: StringGetPos, AusgabeVar, EingabeVar, abc, , 9. Dieser Parameter kann ein Ausdruck sein.

ErrorLevel

ErrorLevel wird auf 1 gesetzt, wenn das angegebene Vorkommen von Suchtext nicht in EingabeVar gefunden werden konnte, ansonsten auf 0.

Bemerkungen

Im Gegensatz zu StringMid und InStr() gilt bei StringGetPos die 0 als Position des ersten Zeichens.

Die abgerufene Position bezieht sich immer auf das erste Zeichen von EingabeVar, egal ob Vorkommen und/oder Offset angegeben sind. Wenn zum Beispiel die Zeichenkette "abc" in 123abc789 gefunden wird, ist die gemeldete Position immer 3, unabhängig von der verwendeten Suchmethode.

Wenn das angegebene Vorkommen von Suchtext innerhalb von EingabeVar nicht existiert, wird AusgabeVar auf -1 und ErrorLevel auf 1 gesetzt.

Mit SplitPath kann ein Dateipfad auf einfache Weise in Verzeichnis, Dateiname und Erweiterung aufgeteilt werden.

Die internen Variablen %A_Space% und %A_Tab% können genutzt werden, um ein einzelnes Leerzeichen bzw. Tabulatorzeichen anzugeben. Sie sind nützlich, um nach Leer- und Tabulatorzeichen zu suchen, die entweder einzeln oder am Anfang oder Ende von Suchtext vorkommen.

Siehe auch

InStr(), RegExMatch(), IfInString, if Var in/contains Vergleichsliste, StringCaseSense, StringReplace, SplitPath, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, if Var is Typ

Beispiele

Heuhaufen = abcdefghijklmnopqrs
Nadel = def
StringGetPos, Pos, Heuhaufen, %Nadel%
if Pos >= 0
    MsgBox, Die Zeichenkette wurde auf Position %Pos% gefunden.
; Beispiel #2:
; Teilt den vollständigen Pfadnamen einer Datei in einzelne Komponenten auf.
; Beachten Sie, dass das mit StringSplit oder mit einer
; Parsende Schleife viel einfacher ist - das folgende Skript dient nur zur Veranschaulichung.
FileSelectFile, Datei, , , Wählen Sie einen Dateinamen in einem tief verschachtelten Ordner aus:
if Datei <>
{
    StringLen, Pos_vorher, Datei
    Pos_vorher += 1 ; Setzt die Position auf das Zeichen, dass nach dem letzten Zeichen erfolgt.
    Loop
    {
        ; Sucht nach dem Nten Vorkommen, beginnend von rechts:
        StringGetPos, Pos, Datei, \, R%A_Index%
        if ErrorLevel
            break
        Länge := Pos_vorher - Pos - 1
        Pos_vorher := Pos
        Pos += 2  ; Für die Verwendung mit StringMid anpassen.
        StringMid, Pfad_Komponente, Datei, %Pos%, %Länge%
        MsgBox Pfadkomponente #%A_Index% (von rechts) ist:`n%Pfad_Komponente%
    }
}